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

TensorFlow错误:logits和标签必须大小相同

如何解决《TensorFlow错误:logits和标签必须大小相同》经验,为你挑选了1个好方法。

我一直在尝试通过基于互联网上的各种示例实施ApproximatelyAlexNet来学习TensorFlow.基本上延伸AlexNet例如这里采取224x224 RGB图像(而不是28x28灰度图像),并加入一对夫妇更多的层,改变内核大小,进展等,每等AlexNet实现我在网上找到.

已经解决了一些不匹配的形状类型错误,但这个让我难过:

tensorflow.python.framework.errors.InvalidArgumentError: logits and labels must be same size: logits_size=dim { size: 49 } dim { size: 10 } labels_size=dim { size: 1 } dim { size: 10 }
     [[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Softmax, _recv_Placeholder_1_0/_13)]]
     [[Node: gradients/Mean_grad/range_1/_17 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_457_gradients/Mean_grad/range_1", tensor_type=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

49维尤其令人费解.对于调试,我的批量大小目前为1,如果我将其增加到2,则49变为98.

如果我记录我传递给的x和y的形状

sess.run(optimizer, feed_dict={x: batchImages, y: batchLabels, keepProb: P_DROPOUT})

我明白了

x shape: (1, 150528)
y shape: (1, 10)

这是预期的:150528 = 224*224 RGB像素,以及表示我的标签的单热矢量.

非常感谢任何帮助解决这个问题!

更新:代码显示错误:

https://gist.github.com/j4m3z0r/e70096d0f7bd4bd24c42



1> mrry..:

感谢您将代码作为Gist共享.为了使形状达成一致,有两个必要的变化:

    这条线:

    fc1 = tf.reshape(pool5, [-1, wd1Shape[0]])
    

    ...负责49批量维度中的错误.输入为1 x 7 x 7 x 256,并且重新整形为49 x 256,因为wd1Shape[0]是256.可能的替换如下:

    pool5Shape = pool5.get_shape().as_list()
    fc1 = tf.reshape(pool5, [-1, pool5Shape[1] * pool5Shape[2] * pool5Shape[3]])
    

    ......它 fc1的形状为1 x 12544.

    进行此更改后,'wd1'权重矩阵(256 x 4096)的大小与中的节点数不匹配fc1.您可以按如下方式更改此矩阵的定义:

        'wd1': tf.Variable(tf.random_normal([12544, 4096])),
    

    ...尽管您可能希望修改其他权重,或执行其他池以减小此矩阵的大小.

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