首页 文章

标签等级(收到1)应该等于logits减1(收到4)

提问于
浏览
1

我有 tf.RandomShuffleQueue 调用data_queue定义如下:

self.data_queue = tf.RandomShuffleQueue(capacity=1024,
                                                    min_after_dequeue=21,
                                                    dtypes=[tf.float32,
                                                            tf.int32],
                                                    shapes=[[221, 221, 3], []],
                                                    name="data_queue")

我能够成功地将数据项排入其中 .

出列操作定义如下:

[self.batch_images, self.batch_labels] = self.data_queue.dequeue_up_to(self.batchsize)

在上面的代码片段 self.batchsize 是一个恒定的张量 .

问题现在开始如下:

我想将这些直接推送到我的图表中 . 为清楚起见,我的图表的第一层如下:

conv1 = tf.layers.conv2d(self.batch_images, filters=96, kernel_size=7,
                                     strides=2,
                                     activation=tf.nn.relu,
                                     kernel_regularizer=tf
                                     .random_uniform_initializer,
                                     name='conv1')

引用错误的最后几行是:

drop2 = tf.layers.dropout(fc2, name='drop2')
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
                logits=drop2,
                                                        labels=self.batch_labels,
                                                                  name="cross_entropy_per_example")

我收到的错误是:

line 1709, in sparse_softmax_cross_entropy_with_logits
    (labels_static_shape.ndims, logits.get_shape().ndims))
ValueError: Rank mismatch: Rank of labels (received 1) should equal rank of logits minus 1 (received 4).
  • 当我检查 tf.rankself.labelstf.rank 时,我得到以下内容:

标签张量(“Rank:0”,shape =(),dtype = float32)图像张量(“Rank_1:0”,shape =(),dtype = int32)

它是什么原因?

NOTE 我不想使用 tf.placeholderfeed_dict . 我想将 self.data_queue 直接连接到图表 .

1 回答

  • 1

    我自己找到了解决方案 . 如果其他人在将来需要帮助,请将其发布在此处 .

    卷积层的输出必须重新整形,保持批量大小相同 . 这很重要,否则完全连接的计算没有意义 . 不幸的是, tf.layers.dense here的文档在这方面非常模糊,并没有做适当的重塑 .

    我使用 tf.contrib.layers.flatten 进行了重塑,它就像一个魅力

相关问题