Проблема с Keras с использованием предварительно обученного Inceptionv3 - PullRequest
2 голосов
/ 25 июня 2019

Я использую InceptionV3 с весами imagenet в Керасе.Версия Keras, которую я использую, - 2.2.4, а Keras-приложения - 1.0.8.Версия с тензорным потоком - 1.14.0.Я следую стандартному способу использования InceptionV3 для трансферного обучения, как указано здесь .Я получаю эту ошибку ValueError: Input 0 is incompatible with layer global_average_pooling2d_3: expected ndim=4, found ndim=2.Я нашел GitHub post , где пользователь столкнулся с той же проблемой.Я последовал предложению, которое исправило проблему на посту GitHub, но мне не повезло.MWE ниже

from keras.layers import Input, Dense, Activation, GlobalAveragePooling2D
from keras.models import Model
from keras.applications.inception_v3 import InceptionV3

base_model = InceptionV3(weights='imagenet', include_top='False')

x = base_model.output
x = GlobalAveragePooling2D()(x) # Error appears here
x = Dense(1024, activation='relu')(x)
predictions = Dense(3, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)

1 Ответ

2 голосов
/ 25 июня 2019

Причина в том, что вы передали строку 'False' в include_top.Непустые строки оцениваются как True, так что то, что вы считаете моделью топлесс, фактически было полностью украшено средними пулами, уменьшающими размерность, и полностью связанными слоями.

Соответственно, один из способов решения этой проблемыВаша проблема заключается в том, чтобы изменить 'False' на False.Я бы добавил, однако, что вы можете просто указать pooling='avg', поэтому вам нужно только добавить последний Dense слой ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...