首页 > 解决方案 > '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].

我尝试像其他帖子所建议的那样改变步幅和填充,但没有任何效果。我可能在这里遗漏了一些简单的东西。

标签: pythontensorflowdeep-learning

解决方案


我怀疑conv2d正在使用padding='VALID'(无填充),也许您需要'SAME'or 'same'。由于代码中没有给出值,我只是列出了可能的填充混淆,conv2dmax_pool在 tensorflow 中定义。这些版本的 padding 的默认值conv2d如下:


推荐阅读