#python #image-processing #deep-learning #flatten #faster-rcnn
#python #обработка изображений #глубокое обучение #выравнивание #быстрее-rcnn
Вопрос:
image_input = Input(shape=(224, 224, 3))
model = ResNet50(weights='imagenet', include_top=True)
model.summary()
last_layer = model.get_layer('avg_pool').output
last_layer.shape
x= Flatten(name='flatten')(last_layer)
out = Dense(num_classes, activation='softmax', name='output_layer')(x)
custom_resnet_model = Model(inputs=image_input,outputs= out)
custom_resnet_model.summary()
for layer in custom_resnet_model.layers[:-1]:
layer.trainable = False
custom_resnet_model.layers[-1].trainable
custom_resnet_model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
t=time.time()
hist = custom_resnet_model.fit(X_train, y_train, batch_size=32, epochs=1, verbose=1,
validation_data=(X_test, y_test))
print('Training time: %s' % (t - time.time()))
(loss, accuracy) = custom_resnet_model.evaluate(X_test, y_test, batch_size=10, verbose=1)
print("[INFO] loss={:.4f}, accuracy: {:.4f}%".format(loss,accuracy * 100))
Я получал эту ошибку
Ввод 0 несовместим с выравниванием слоя: ожидаемый min_ndim=3, найдено ndim=2 при запуске x= Flatten(name=’flatten’)(last_layer).
Форма last_layer
является TensorShape([Dimension(None), Dimension(2048)])
? Кто-нибудь может объяснить, как решить эту проблему в keras?
Комментарии:
1.
Flatten()
Слой требует, чтобы входные данные имели как минимум 3 измерения.last_layer
Кажется, что имеет только 2 измерения.2. Итак, какой должна быть форма слоя выравнивания?? В какую форму его следует преобразовать