ValueError:由于输入形状为 [?,1,1,64] 的"max_pooling2d_1/MaxPool"(操作:"MaxPool")从 1 中减去 12 而导致的负尺寸



我正在使用带有Tensorflow的Keras作为后端,nhere是我的代码:

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'))

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

ValueError:对于"{{node max_pooling2d_1/MaxPool}}=MaxPoolT=DT_FLOAT,data_format=",从3中减去8导致的负维度大小;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'))

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

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

最新更新