Я занимаюсь исследованиями и для эксперимента хочу использовать градиенты определенного слоя в сети по отношению к входу сети (аналогично управляемому backprop) в качестве входа в другую сеть (классификатор).Цель состоит в том, чтобы «заставить» сеть изменить «внимание» в соответствии с классификатором, поэтому эти две сети должны обучаться одновременно.
Я реализовал это следующим образом:
input_tensor = model.input
output_tensor = model.layers[-2].output
grad_calc = keras.layers.Lambda(lambda x:K.gradients(x,input_tensor)[0],output_shape=(256,256,3),trainable=False)(output_tensor)
pred = classifier(grad_calc)
out_model = Model(input_tensor,pred)
out_model.compile (loss = 'mse', optimizer = keras.optimizers.Adam (0.0001), metrics = ['precision'])
Затем, когда я пытаюсь обучить модель
out_model.train_on_batch(imgs,np.zeros((imgs.shape[0],2)))
это не работает.Кажется, что он застрял там, ничего не происходит (ни ошибки, ни другого сообщения).
Я не уверен, что это правильный способ реализовать это, поэтому я был бы очень благодарен, если кто-то с большим опытом может взятьпосмотри и дай мне совет.