Я пытаюсь использовать вывод model.predict
как вход для другой модели.Это на самом деле для целей отладки, и почему я не использую get_layer.output
или глобальную модель, которая объединяет эти две модели.
Я сталкиваюсь с этой ошибкой:
TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("input_1:0", shape=(?, 10, 10, 2048), dtype=float32) is not an element of this graph.
Вот мой текущий код:
Я использую приведенную ниже функцию в качестве узкого места генератора
def test_model_predictions(params):
batch_size = params['batch_size'] #params just contains model parameters
base_model = create_model() #this just creates an instance of Inception model with final layers cutoff
train,_ = create_generators(params) #creats a generator for image files
while True:
for x, y in train:
predict1 = base_model.predict(x)
yield (predict1, y)
def training_bottleneck():
bottleneck_train = test_model_predictions(params) #generator
def bottleneck_model_1():
bottleneck_input = Input(shape = (10, 10, 2048))
x = GlobalAveragePooling2D()(bottleneck_input)
x = Dense(1024, activation='relu')(x)
predictions = Dense(params['classes'], activation='softmax')(x)
model = Model(inputs=bottleneck_input, outputs=predictions)
return model
model2 = bottleneck_model_1()
model2.compile(optimizer= optimizers.SGD(lr=0.0001, momentum=0.99),
loss='categorical_crossentropy', metrics = ['accuracy'])
print('Starting model training')
history = model2.fit_generator(bottleneck_train,
steps_per_epoch = 1000,
epochs = 85,
shuffle= False,
verbose = 2, )
return history
Есть какие-нибудь подсказки, как заставить это работать?
Спасибо.
РЕДАКТИРОВАТЬ: кажется, некоторая путаница относительно того, почему я делаю это таким образом, поэтому я добавлю еще немного информации.
Я специально использовал predict
, потому что я заметилрасхождение при сохранении значений model.predict (значений узких мест) в файл hdf5 и последующей загрузке этих значений в другую модель (вторая половина исходной модели),
по сравнению с простой загрузкой всей модели и просто замораживаниемверхняя половина (не могу тренировать первую половину).Разница, которую я заметил, несмотря на использование одних и тех же гиперпараметров и, по сути, одинаковой модели, заключалась в том, что полная модель обучается правильно и сходится, в то время как модель, загружающая значения узкого места, на самом деле не улучшалась.Таким образом, я пытался понять, что слияние model.predict
для сохранения значений узких мест стало причиной несоответствия между обеими моделями.