Я использую действительно простую нейронную сеть с последней версией tenorflow 2.0 на ноутбуке Jupyter, работающем под управлением python 3.7.0. Из матрицы M NN вычисляет параметр P. Затем у меня есть функция F, которая из P вычисляет другую матрицу M ', которую я хочу использовать в моей функции потерь.
Я понимаю, что TF2.0 автоматически дает мне градиенты от M до P. Я также рассчитал градиенты от P до M ', которые я хочу подключить, используя правило цепочки, чтобы получить полные градиенты от M до M'.
I Я искал документацию на сайте TF, но не нашел ответа на мою проблему. Как мне действовать?
Редактировать: код, который я пытаюсь сделать, следующий:
model = tf.keras.models.Sequential()
# Add the layers
model.add(tf.keras.layers.Dense(32, activation="relu"))
model.add(tf.keras.layers.Dense(16, activation="relu"))
model.add(tf.keras.layers.Dense(1, activation="relu"))
# The loss method
loss_object = tf.keras.losses.MeanSquaredError()
# The optimize
optimizer = tf.keras.optimizers.Adam()
# This metrics is used to track the progress of the training loss during the training
train_loss = tf.keras.metrics.Mean(name='train_loss')
def train_step(Data): #Data is: Blurred image; blurr matrix; max(true image); gvar; true image
img = Data[4]
MainGaussian_init(Data)
for _ in range (K):
with tf.GradientTape() as tape:
Xip= model( M )
MainGaussian_1_U () #Computes M' from Xip aka P
print ("img=", img)
loss= loss_object(M_true, M2) #with M2 as M'
print ("loss=", loss)
gradients = tape.gradient(loss, model.trainable_variables)
print (gradients)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
Дайте мне знать, если что-то из этого нужно сделать более понятным!