ValueError:负尺寸大小是由于输入形状为[?,1,1,64]的'max_pooling2d_1 / MaxPool'(op:'MaxPool')从1中减去12引起的

时间:2020-11-08 13:51:29

标签: python machine-learning keras deep-learning cnn

我将Tensorflow作为后端使用Keras,这是我的代码:

K.clear_session()
model=Sequential()
model.add(layers.Conv2D(32,(3,3),padding='same',input_shape=(49,43,1),activation='relu'))
model.add(layers.Conv2D(64,(3,3),activation='relu'))


model.add(layers.MaxPool2D(pool_size=(8,8)))
model.add(layers.Conv2D(32,(3,3),padding='same',activation='relu'))
model.add(layers.Conv2D(64,(3,3),activation='relu'))

model.add(layers.MaxPool2D(pool_size=(8,8)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(layers.Dense(256,activation='relu'))
model.add(layers.Dense(4,activation='softmax'))

1 个答案:

答案 0 :(得分:0)

运行代码时,我得到的输出是不同的-不同的数字:

ValueError:'{{node max_pooling2d_1 / MaxPool}}的3中减去8引起的负尺寸大小= MaxPoolT = DT_FLOAT,data_format =“ NHWC”,ksize = [1,8,8,1],padding =“ VALID”,步幅= [1,8,8,1]',输入形状为[?,3,3,64]。

您的输入太小,无法遍历所有图层。我在下面的代码上添加了每一层的输出。当到达第二个MaxPool层时,它已经太小了,无法除以8。

model=Sequential()
model.add(layers.Conv2D(32,(3,3),padding='same',input_shape=(49,43,1),activation='relu'))
# Output: (49, 43, 32)
model.add(layers.Conv2D(64,(3,3),activation='relu'))
# Output: (47, 41, 64)

model.add(layers.MaxPool2D(pool_size=(8,8)))
# Output: (5, 5, 64))

model.add(layers.Conv2D(32,(3,3),padding='same',activation='relu'))
# Output: (5, 5, 32)
model.add(layers.Conv2D(64,(3,3),activation='relu'))
# Output: (3, 3, 64)
model.add(layers.MaxPool2D(pool_size=(8,8)))
# Output: How can I divide 3 by 8???

model.add(Activation('relu'))
model.add(Flatten())
model.add(layers.Dense(256,activation='relu'))
model.add(layers.Dense(4,activation='softmax'))

关于计算层输出的问题和博客文章很多。

因此,要么增加您的输入,要么删除模型中的某些图层。