考虑使用卷积神经网络对字符进行文本分类示例:我想要三层卷积(而不是原始代码中的两层)。这是修改后的三层代码。看来我的形状有问题。请您考虑一下代码并让我知道它有什么问题吗?
问问题
388 次
1 回答
2
如果将print(pool1)
、print(pool2)
和print(pool3)
分别放在第 68、83 和 90 行,您会注意到只打印了前两个:
Tensor("CNN_Layer1/transpose:0", shape=(?, 41, 10, 1), dtype=float32)
Tensor("CNN_Layer2/transpose:0", shape=(?, 11, 10, 1), dtype=float32)
那是因为您在创建新操作时没有注意数据维度。看一下网络维度的变化:
byte_list output shape = (?, 100, 256, 1)
# apply 10x conv1 filters of size (20,256)
conv1 output shape = (?, 81, 1, 10)
# apply max_pooling of size 4 and stride 2 + transpose filter dimension
pool1 output shape = (?, 41, 10, 1)
# apply 10x conv2 filters of size (20,10)
conv2 output shape = (?, 22, 1, 10)
# apply max_pooling of size 4 and stride 2 + transpose filter dimension
pool2 output shape = (?, 11, 10, 1)
然后你尝试应用 10x conv2 大小的过滤器(20,10)
,但你的张量有形状(?, 11, 10, 1)
。如果此操作成功应用于它,它的形状将是(?, -8, 1, 10)
,但负尺寸是不可能的。因此,问题来自第 86 行。
有多种方法可以解决这个问题,所有这些方法都涉及更改过滤器大小和/或网络架构。只需尝试写下这些维度以跟踪正在发生的事情,您应该能够弄清楚如何去做。:-)
于 2017-03-27T18:12:44.827 回答