Установка пользовательских градиентов на TensorFlow 2.0 - PullRequest
0 голосов
/ 30 января 2020

Я использую действительно простую нейронную сеть с последней версией 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)

Дайте мне знать, если что-то из этого нужно сделать более понятным!

...