Как мне изменить вывод из тензора, обновив переменную? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть функция потерь, которая зависит от некоторой переменной, затем я хочу изменить эту переменную и получить обновленную потерю. Потеря дается мне как вход в функцию, поэтому я не могу просто переместить эту строку в tf.control_dependencies (что дает мне то, что я хочу). Так как же мне go обновить переменную и потерю после нее?

X = tf.Variable(1.0)                     #Dummy parameters of a neural network
loss = (X+1.0)**2                        #Dummy Loss function given to me as input

add = tf.assign(X,X+1.0)                 #Me changing the parameters of the network
with tf.control_dependencies( [ add ] ):
    updated_loss = loss                  #Me wanting the updated loss
print(K.eval(updated_loss ))             #Me not getting the updated loss :(

1 Ответ

0 голосов
/ 30 апреля 2020

Когда вы делаете переменную потерь, вы присваиваете ей начальное значение, это не делает ее функцией, которая будет переоценивать потери при каждом ее вызове.

Мы можем сделать функцию потерь, которая вызывается для расчета потерь каждый раз

Редактировать: я изменил код, приведенный ниже, чтобы переназначить значение переменной тензор потока потерь, а не возвращать новую переменную.

import tensorflow as tf
import tensorflow.keras.backend as K

# Function that updates the loss
@tf.function
def update_loss(X, loss):
    loss.assign((X+1.0)**2)

def test():
    # Initialise a value of loss
    loss = tf.Variable(0.0)
    print(K.eval(loss))

    # Initialise variable
    X = tf.Variable(2.0)

    # Update loss
    update_loss(X, loss)
    print(K.eval(loss))

    # Change network by adding 1.0
    X.assign_add(1.0)

    # Update loss
    update_loss(X, loss)
    print(K.eval(loss))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...