当前位置:  开发笔记 > 编程语言 > 正文

排名不匹配:标签排名(收到2)应该等于logits排名减去1(收到2)

如何解决《排名不匹配:标签排名(收到2)应该等于logits排名减去1(收到2)》经验,为你挑选了2个好方法。

我正在构建DNN来预测图像中是否存在对象.我的网络有两个隐藏层,最后一层看起来像这样:

  # Output layer
  W_fc2 = weight_variable([2048, 1])
  b_fc2 = bias_variable([1])

  y = tf.matmul(h_fc1, W_fc2) + b_fc2

然后我有标签的占位符:

y_ = tf.placeholder(tf.float32, [None, 1], 'Output')

我分批进行训练(因此输出图层形状中的第一个参数为无).

我使用以下损失函数:

cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
    y[:, :1], y_[:, :1], name='xentropy')
loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
predict_hand = tf.greater(y, 0.5)
correct_prediction = tf.equal(tf.to_float(predict_hand), y_)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

但在运行时我收到以下错误:

等级不匹配:标签等级(收到2)应等于对数等级减1(接收2).

我想我应该重塑标签层,但不确定它的期望.我查阅了文档,它说:

logits:秩r和形状[d_0,d_1,...,d_ {r-2},num_classes]和dtype float32或float64的非标定日志概率.标签:形状张量[d_0,d_1,...,d_ {r-2}]和dtype int32或int64.标签中的每个条目必须是[0,num_classes)中的索引.

如果我只有一个单独的类,我的标签应该是什么样的(现在它只是0或1)?任何帮助赞赏



1> Daniel Adiwa..:

从文档*为tf.nn.sparse_softmax_cross_entropy_with_logits:

"常见的用例是对形状[batch_size,num_classes]和形状标签[batch_size]进行记录.但支持更高的尺寸."

所以我认为你的标签张量应该是合适的[None].请注意,具有形状[None, 1]或形状的给定张量[None]将包含相同数量的元素.

具有具体虚拟值的示例输入:

>>> logits = np.array([[11, 22], [33, 44], [55, 66]])
>>> labels = np.array([1, 0, 1])

小批量中有3个例子,logits第一个例子是11和22,有2个类:0和1.

*https://www.tensorflow.org/versions/r0.11/api_docs/python/nn.html#sparse_softmax_cross_entropy_with_logits



2> Rubens_Zimbr..:

问题可能出在您网络中的激活功能上。使用tf.nn.softmax_cross_entropy_with_logits而不是sparse_softmax。这样可以解决问题。

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有