Python MaxPool上的负维度大小
我已经用Keras实现了以下模型。下面,我使用的是TensorflowPython 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,
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中更改参数。