输入形状为[?,1,1,32]

2024-05-18 09:09:41 发布

您现在位置:Python中文网/ 问答频道 /正文

将Keras和Tensorflow用于28x28x1数据集。当我运行以下代码时,它可以正常工作:

model = Sequential()

model.add(Convolution2D(8, 3, strides = 3, activation='relu', input_shape=(28,28,1),data_format = 'channels_last',padding='same'))

model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Convolution2D(16, 3, strides = 3, activation='relu',padding='same'))

model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Convolution2D(32, 3, strides = 3, activation='relu',padding='same'))
#model.add(AveragePooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

#Training the model in kreas
history = model.fit(train_dataset_kr,train_labels_kr,epochs = 500, validation_data = (valid_dataset_kr,vaild_labels_kr),batch_size = 256)
#model.train_on_batch(train_dataset_kr,train_labels_kr)

score = model.evaluate(test_dataset_kr, test_labels_kr, verbose=0)

当我输入最后的pooling2d(在本例中是averagepoolig2d),我就会得到以下错误:

^{pr2}$

根据我输入文件的大小,我认为我应该能够做3池2D。有什么想法我可能做错了吗?在


Tags: addsizelabelsmodeltrainactivationdatasetdropout
1条回答
网友
1楼 · 发布于 2024-05-18 09:09:41

你为你的模特定了太大的步伐。让我们检查一下网络的输出形状:

model = Sequential()

model.add(Convolution2D(8, 3, strides = 3, activation='relu', input_shape=(28,28,1),data_format = 'channels_last',padding='same'))
# Shapes: (28, 28, 1) -> (10, 10, 8)
model.add(MaxPooling2D(pool_size=(2,2)))
# Shapes: (10, 10, 8) - > (5, 5, 8)
model.add(Dropout(0.25))

model.add(Convolution2D(16, 3, strides = 3, activation='relu',padding='same'))
# Shapes: (5, 5, 8) -> (2, 2, 16)
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Convolution2D(32, 3, strides = 3, activation='relu',padding='same'))
# Shapes: (2, 2, 16) -> (1, 1, 32)
#model.add(AveragePooling2D(pool_size=(2,2)))
# (1, 1, 32) - this shape is too small for pooling.
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

是否确实要将strides参数设置为具有值3?它将每层的输出减少3。在

相关问题 更多 >