【问题标题】:TF one hot encode tensor objectTF 一热编码张量对象
【发布时间】:2019-02-07 20:43:21
【问题描述】:

按照 mnist 简单示例运行简单的逻辑回归 我的代码:

x = np.array(xHotdog + xNotHotdog)
y = np.array(yHotdog + yNotHotdog)

print("y shape before: "+str(y.shape))
y = tf.one_hot(indices=y, depth=2)
print("y shape after: "+str(y.shape))    
y.eval()
return x,y

稍后我运行:

sess.run([optimizer, cost], feed_dict={x: batch_xs,y: batch_ys})

得到错误:

TypeError:提要的值不能是 tf.Tensor 对象。 可接受的提要值包括 Python 标量、字符串、列表、numpy ndarrays 或 TensorHandles。作为参考,张量对象是 已通过的 Tensor("one_hot:0", shape=(6457, 2), dtype=float32) 使用键 Tensor("Placeholder_1:0", shape=(?, 2), dtype=float32)。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    您想将 Tensor object 传递给 feed_dict 并引发错误。正如docs中提到的:

    可选的 feed_dict 参数允许调用者覆盖 图中张量的

    feed_dict:将图形元素映射到值

    的字典

    所以你需要一些 feed_dict 的值。如报错所示:

    可接受的提要值包括 Python scalarsstringslistsnumpy ndarraysTensorHandles

    选项 1:在您的情况下,您通过 Tensor object 导致此类异常。问题可以这样解决:

    y = tf.placeholder(tf.float32, [None, 10], name="Y")
    y = tf.one_hot(indices=y, depth=2)
    ...
    
    sess.run([optimizer, cost], feed_dict={x: batch_xs,y: batch_ys})
    

    选项 2:您还可以使用(在这种情况下不需要 feed_dict)评估值:

    a = np.random.randint(1, 10, [20])
    b = tf.one_hot(a, depth=10)
    
    with tf.Session() as sess:
        print(a)
        print(sess.run([b])) 
    

    【讨论】:

    • 我不明白我应该改变什么。你的建议看起来和我写的代码一模一样?
    • @JY2k 我写了两个不同的选项。我认为第一个可以解决您的问题
    • 我需要在会话中进行评估
    猜你喜欢
    • 2019-10-24
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 2021-05-17
    相关资源
    最近更新 更多