Я использую последние Keras с бэкэндом тензорного потока.
Я не совсем уверен, как правильно собрать полную модель для логического вывода , если бы я использовал меньшую версиюмоя модель для тренировок по значениям узких мест.
# Save bottleneck values
from keras.applications.xception import Xception
base_model = Xception(weights='imagenet', include_top=False)
prediction = base_model.predict(x)
** SAVE bottleneck data***
Теперь предположим, что моя полная модель выглядит примерно так:
base_model = Xception(weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(classes, activation='softmax')(x)
model = Model(input=base_model.input, output=predictions)
, но чтобы ускорить обучение, я хотел обойти более ранние слоипутем загрузки значений узких мест;поэтому я создаю меньшую модель (включая только новые слои).Затем я обучаю и сохраняю модель.
bottleneck_input = Input(shape = bottleneck_shape)
x = GlobalAveragePooling2D() (bottleneck_input)
x = Dense(1024, activation='relu')(x)
predictions = Dense(classes, activation='softmax')(x)
model = Model(input= bottleneck_input, output=predictions)
save_full_model() #save model
После обучения этой меньшей модели я хочу выполнить вывод по полной модели.Поэтому мне нужно собрать базовую модель и меньшую модель.Не уверен, что это лучший способ сделать это.
base_model = Xception(weights='imagenet', include_top=False)
#x = base_model.output
loaded_model = load_model() # load bottleneck model
#now to combine both models (something like this?)
Model(inputs = base_model.inputs, outputs = loaded_model.outputs)
Как правильно составить модель для вывода?Я не знаю, есть ли способ использовать мою полную модель для обучения и просто начать со слоев узкого места для обучения и слоя ввода для вывода.(Обратите внимание, что это не то же самое, что стоп-слои, которые просто замораживают веса (веса не будут обновляться), но по-прежнему рассчитывают каждую точку данных.)