为一个热编码数据定义占位符张量

时间:2017-09-01 08:15:44

标签: python tensorflow

在代码下面运行:

 loss = tf.losses.softmax_cross_entropy(onehot_labels=training_outputs, logits=logits)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(loss)

    init = tf.global_variables_initializer()

    # define placeholder for inputs to network
    xs = tf.placeholder(tf.float32,[None,2000])
    ys = tf.placeholder(tf.float32,[None,81])


    with tf.Session() as sess:
        sess.run(init)
        for i in range(1000):
            sess.run(optimizer, feed_dict={xs:training_inputs, ys:training_outputs})

返回错误:

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_150' with dtype float
     [[Node: Placeholder_150 = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

我认为这与training_inputs&的格式有关。 training_outputs即:

enter image description here

enter image description here

training_inputs& training_outputs是一个热门编码。但是每个都应该是array([],[]....)而不是array([[],[],...])

2 个答案:

答案 0 :(得分:2)

  

training_inputs& training_outputs是一个热门编码。但是每个都应该是array([],[] ....)而不是array([[],[],...])?

不,输入和输出看起来很好。

错误表示您没有提供运行optimizer张量所需的占位符。从错误消息(Placeholder_150)中的占位符名称可以看出,您已经创建了许多占位符。

当您将笔记本与tensorflow结合使用时,您需要知道的一件事是每次使用

执行单元格时
xs = tf.placeholder(tf.float32,[None,2000])
ys = tf.placeholder(tf.float32,[None,81])

新的占位符将添加到图表中。第一次执行时"Placeholder_0""Placeholder_1"将第二次添加"Placeholder_2""Placeholder_3",依此类推。

问题可能是xsys不能引用用于计算optimizer的相同占位符。

例如,如果您先执行

,就会发生这种情况
 xs = tf.placeholder(tf.float32,[None,2000])
 ys = tf.placeholder(tf.float32,[None,81])

然后从optimizerxs构建ys然后执行

的部分
 xs = tf.placeholder(tf.float32,[None,2000])
 ys = tf.placeholder(tf.float32,[None,81])

再次运行会话之前。

修改: 创建optimizer张量后创建占位符也是错误的。由于optimizer应取决于这些占位符。它应该在您第一次运行笔记本时出错,但第二次它可能导致您得到的错误。

答案 1 :(得分:0)

我认为你对损失计算感到困惑

# Here onehot_labels is not exactly the training outputs data, but the ground truths labels placeholder <ys> of your training data <xs>
# this line should be replaced with 
loss = tf.losses.softmax_cross_entropy(onehot_labels=training_outputs, logits=logits)
# this one
loss = tf.losses.softmax_cross_entropy(onehot_labels=ys, logits=logits)