0

我正在尝试对某些数据使用 CNN,但我的损失函数出现错误,因为我的模型的输出是 [1000, 1000, 4000] 的形状,而它应该是 [1000, 4000]。在这种情况下,前 1000 个是批量大小,而 4000 是我拥有的类数,因为这是一个分类问题。

我想我可能需要在完全连接层之后再次使用 tf.reshape() 函数来获得正确的输出,但我不太确定如何做到这一点。我已经尝试过 tf.reshape(output [-1, 4000]),但这仍然保留了另外 1000 个。

这是我的代码:

    cnn_input = tf.reshape(input, [-1, 1000, 1])
    net = slim.conv2d(cnn_input, 128, [3])
    net = slim.pool(net, [2], "MAX")
    output = slim.fully_connected(net, num_classes, activation_fn=tf.nn.softmax)
    return output

基本上,我的输出需要是 2 级的形状,但由于某种原因,它变成了 3 维。我需要输出的形状为 [1000, 4000],即批量大小 x num_classes。

任何帮助将不胜感激。提前致谢!

顺便说一句,我正在使用 tf-slim 库。

编辑: tf.flatten 在完全连接层之前会为此工作吗?

4

1 回答 1

0

我遇到了同样的错误。文档(第1609 行)(从此处链接)表明“完全连接”操作应该使输出变平,但事实并非如此。我只是按照你的建议在最后几个完全连接的操作之前使用了 slim.flatten,但我还没有具体的证据表明它有效。

由于 6 个月没有评论,我认为对其他人来说有总比没有好,但如果其他人有更多的见解,将不胜感激。

于 2017-12-13T20:22:13.700 回答