python - 'maxpool1/MaxPool'(操作:'MaxPool')从 2 中减去 3 导致的负尺寸大小
问题描述
我已经在张量流中实现了用于图像分类的squeezenet模型,如下所示:
net = conv2d(images, 96, [7, 7], stride=2, scope='conv1')
net = max_pool2d(net, [3, 3], stride=2, scope='maxpool1')
net = fire_module(net, 16, 64, scope='fire2')
net = fire_module(net, 16, 64, scope='fire3')
net = fire_module(net, 32, 128, scope='fire4')
net = max_pool2d(net, [3, 3], stride=2, scope='maxpool4')
net = fire_module(net, 32, 128, scope='fire5')
net = fire_module(net, 48, 192, scope='fire6')
net = fire_module(net, 48, 192, scope='fire7')
net = fire_module(net, 64, 256, scope='fire8')
net = max_pool2d(net, [3, 3], stride=2, scope='maxpool8')
net = fire_module(net, 64, 256, scope='fire9')
net = conv2d(net, num_classes, [1, 1], stride=1, scope='conv10')
net = avg_pool2d(net, [13, 13], stride=1, scope='avgpool10')
logits = tf.squeeze(net, [2], name='logits')
return logits
当我进行培训时,我收到以下错误:
ValueError: Negative dimension size caused by subtracting 3 from 2 for 'maxpool1/MaxPool' (op: 'MaxPool') with input shapes: [?,96,122,2].
我尝试像其他帖子所建议的那样改变步幅和填充,但没有任何效果。我可能在这里遗漏了一些简单的东西。
解决方案
我怀疑conv2d
正在使用padding='VALID'
(无填充),也许您需要'SAME'
or 'same'
。由于代码中没有给出值,我只是列出了可能的填充混淆,conv2d
并max_pool
在 tensorflow 中定义。这些版本的 padding 的默认值conv2d
如下:
tf.nn.conv2d
,tf.nn.max_pool
无默认值tf.layers.conv2d
,tf.layers.max_pool2d
.tf.contrib.layers.max_pool2d
默认值为'valid'
tf.contrib.layers.conv2d
默认值为'SAME'
推荐阅读
- python - 如何用二维而不是一维来表示欧几里得距离?
- javascript - 用于(贝叶斯?)时间序列变化点检测的 Javascript 库
- r - 数值向量到日期的转换
- python - 如何在 Pandas 中获取具有表 ID 的数据框?
- java - 具有外键和生成列的复合 ID,无法保存
- sql-server - 使用 jinja 将子网分配给 sqladmin 实例
- java - Java中的测试时间。更改 spock 存根值
- javascript - xhtmlrenderer xhtml 到 pdf 字体问题,甚至不能使用 font-family: Verdana;
- javascript - 谷歌图表:点击节点链接导航到其他页面
- mongodb - 使用 Jmeter 中的 groovy 在 mongoDB 中查找聚合