Удалите эти строки, и это будет работать,
model.layers.pop()
model = Model(input=model.input,output=model.layers[-1].output)
Первый удаляет последний (Dense
) слой, а буква означает создание модели без последнего (Flatten
, какDense
уже всплыл) слой.
Это не имеет смысла, так как ваши целевые данные (100, 2). Почему вы помещаете их туда в первую очередь?
Также я думаю, что эта строка
predictions = Dense(1, activation='sigmoid')(x)
Произойдет ошибка, так как ваши целевые данные являются 2-канальными, если они имеют ошибку, то измените это на
predictions = Dense(2, activation='sigmoid')(x)
Обновление
Вывод avg_pool
имеет 4 измерения (batch_size, высота, ширина, канал). Вам нужно сначала сделать Flatten
или использовать GlobalAveragePooling2D
вместо AveragePooling2D
.
Как
x = model.get_layer('avg_pool').output
x = keras.layers.Flatten()(x)
predictions = Dense(1, activation='sigmoid')(x)
Или
model = ResNet50(include_top=False, pooling='avg', weights='imagenet') # `pooling='avg'` makes the `ResNet50` include a `GlobalAveragePoiling` layer and `include_top=False` means that you don't include the imagenet's output layer
x = model.output # as I use `include_top=False`, you don't need to care the layer name, just use the model's output right away
predictions = Dense(1, activation='sigmoid')(x)
Также как @Бит01 сказал, замените class_mode='categorical'
на class_mode = 'binary'.