import tensorflow as tf
def main():
NUM_CLASSES = 2 # 2分类
labels = [0, 1, 1, 0, 1, 0, 1, 0] # sample label
batch_size = tf.size(labels) # get size of labels : 8
labels = tf.expand_dims(labels, 1) # 增加一个维度
indices = tf.expand_dims(tf.range(0, batch_size, 1), 1) # 生成索引
concated = tf.concat([indices, labels], 1) # 作为拼接
bs_nc = tf.stack([batch_size, NUM_CLASSES]) # 拼接矩阵 [8 2]
onehot_labels = tf.sparse_to_dense(concated, bs_nc, 1.0, 0.0) # 生成one-hot编码的标签
with tf.Session() as sess:
onehot_labels = sess.run(onehot_labels)
print(onehot_labels)
'''
tf.sparse_to_dense的解释 4个参数
第一个参数 矩阵中元素对应的索引和值 例子中对应concated [[0 0],[1 1],[2 1],[3 0],[4 1],[5 0],[6 1],[7 0]]
第二个参数 输出矩阵的shape 对应bs_nc [8 2]
第三个参数 指定元素值为1.0
第四个参数 其余元素值为0.0
'''
if __name__ == '__main__':
main()
运行结果
[[1. 0.]
[0. 1.]
[0. 1.]
[1. 0.]
[0. 1.]
[1. 0.]
[0. 1.]
[1. 0.]]