CNN Keras:ValueError:负数尺寸是由'conv2d的2减去3引起的

时间:2019-04-17 15:52:38

标签: python tensorflow keras deep-learning conv-neural-network

使用Keras时出现此错误: 是因为input_size不大于过滤器?

如果input_shape =(64,64,3))),则不会出现错误。

 ``ValueError: Negative dimension size caused by subtracting 3 from 2 for 
  'conv2d_24/convolution' (op: 'Conv2D') with input shapes: [?,2,2,128], 
  [3,3,128,128].

我的代码在这里:

from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',                     
                                    input_shape=(32, 32, 3))) 
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

1 个答案:

答案 0 :(得分:0)

默认的图层填充为valid,表示没有填充。这种方式将尺寸从32减少到16,而不是减少到15。您可以改用padding='same'。在这种情况下,输出的长度与原始输入的长度相同。

from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',padding='same',                     
                                    input_shape=(32, 32, 3))) 
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu',padding='same'))
model.add(layers.MaxPooling2D((2, 2),padding='same'))
model.add(layers.Conv2D(128, (3, 3), activation='relu',padding='same'))
model.add(layers.MaxPooling2D((2, 2),padding='same'))
model.add(layers.Conv2D(128, (3, 3), activation='relu',padding='same'))
model.add(layers.MaxPooling2D((2, 2),padding='same'))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))