如何在tensorflow中为我导入的图像手动制作标签列表

时间:2017-11-17 17:15:34

标签: tensorflow

fq=glob.glob("*.jpg") # ['0.jpg','1.jpg','2.jpg','3.jpg','4.jpg'],labels for images=[1,1,1,0,0]
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=onehot))

假设 2个类批量大小为2 logits为[2,2]张量,我该如何制作"onehot"变量列表,其中包含一个热门编码标签,例如图像0,1,2 .jpg的 [1,0] 和图像的 [0,1] 3,4 .jpg。非常感谢:))

2 个答案:

答案 0 :(得分:0)

如果您知道自己需要labels = [1, 1, 1, 0, 0],请使用

tf.one_hot(labels, depth=2)

产生一个单热标签:

array([[ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.],
       [ 1.,  0.],
       [ 1.,  0.]], dtype=float32)

注意tf.one_hot1放入您提供的第一个输入所指示的索引中。另请注意,这是一个张量,所以如果你在笔记本中运行它然后尝试打印张量,你会得到类似的东西:

<tf.Tensor 'one_hot:0' shape=(5, 2) dtype=float32>

直到评估它是否具有上面显示的值,但这只是TensorFlow的作用。

因此,如果批量为2,则每个培训步骤为网络提供两个标签,然后将这些标签(在培训步骤或网络中)转换为一个标签。我会做类似的事情:

labels = tf.placeholder(tf.int32, [None])  # 'None' means it has one dimension that is determined by your batch size
# ... define your network ...
loss_op = tf.nn.softmax_cross_entropy_with_logits(logits=logits,
                                                  labels=tf.one_hot(labels))
loss_op = tf.reduce_mean(loss_op)

然后在你的训练过程中:

for _ in range(num_iter):
    d = # generate data batch
    t = # generate label batch, e.g. [1, 1] for the first two images
    _, batch_loss = sess.run([train_op, loss_op],
                             feed_dict={data: d, labels: t})

答案 1 :(得分:0)

如果您的输入数组是NumPy数组,则可以使用np.eye

label_array = np.array([1, 1, 1, 0, 0])
onehot_array = np.eye(2)[label_array]

结果是:[[0. 1.],[0. 1.],[0。1.],[1. 0.],[1. 0。]]