Python MaxPool上的负维度大小

Python MaxPool上的负维度大小,python,tensorflow,keras,Python,Tensorflow,Keras,我已经用Keras实现了以下模型。下面,我使用的是Tensorflow from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D from keras.layers import Activation, Dropout, Flatten, Dense model = Sequential() model.add(Conv2D(32, (2, 2), input_shape=(3, 150,

我已经用Keras实现了以下模型。下面,我使用的是Tensorflow

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense

model = Sequential()
model.add(Conv2D(32, (2, 2), input_shape=(3, 150, 150), padding='SAME'))
model.add(Activation('relu'))
# model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))

model.add(Conv2D(32, (2, 2), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (2, 2), padding='SAME'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
但是,我有一个例外:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_2/MaxPool' (op: 'MaxPool') with input shapes: [?,1,75,32].
我使用的是
相同的
填充和
2*2
的卷积,因此输出应该是
2*2
,我应该能够在其上运行MaxPooling


我只是不明白输入是如何得到形状的
[?,1,75,32]
问题是第一次卷积的输入大小

您正在使用tensorflow和“最后一个通道”布局。 因此,需要在通道之前指定x和y分辨率

model.add(Conv2D(32, (2, 2), input_shape=(150, 150, 3), padding='SAME'))
您的初始形状是
[?,3,150,150]
,池应用于第二项和第三项,这就是形状
[?,1,75,32]
的创建方式。
32
是卷积中的过滤器数量


如果您想沿着第一个轴保留过滤器,Keras有一个配置文件,在Linux下,该文件应该位于/home/user/.Keras/Keras.json中。在此配置文件中,您可以更改频道布局,该选项称为
image\u data\u format
。在那里,您可以在
channels\u first
channels\u last

之间切换,我将
channels\u last
更改为
channels\u first
,但仍然会出现相同的错误。您在哪里更改的?在配置文件中?你从maxpooling中删除了参数吗?哦,我忘了从MaxPool中更改参数。