Будут ли отличаться результаты обучения от добавления @ tf.function? - PullRequest
0 голосов
/ 04 марта 2020

Я работаю над tenorflow 2.0 на Ubuntu 18.04 на Pycharm. В настоящее время я столкнулся с некоторой проблемой с @tf.function Предположим, у нас есть два цикла обучения. Первый -

@tf.function
def train_step(input_model, input_image, input_label):
    with tf.GradientTape() as tape:
        pred_label = input_model(input_image)
        loss = L(input_label, pred_label) #L=tf.keras.losses.SparseCategoricalCrossEntropy(from_logits=True)
    grads = tape.gradient(loss, input_model.trainable_variables)
    optimizer.apply_gradients((zip(grads, input_model.trainable_variables)))

for each_epoch in range(total_epoch):
    for img, label in train_dataset: #train_dataset is tensorflow batched data
         train_step(my_model, img, label)
my_model.save_weights('checkpoint')

Второй -

for each_epoch in range(total_epoch):
    for img, label in train_dataset: #train_dataset is tensorflow batched data
         with tf.GradientTape() as tape:
              pred_label = my_model(input_image)
              loss = L(input_label, pred_label) #L=tf.keras.losses.SparseCategoricalCrossEntropy(from_logits=True)
         grads = tape.gradient(loss, my_model.trainable_variables)
         optimizer.apply_gradients((zip(grads, my_model.trainable_variables)))
my_model.save_weights('checkpoint')

Будут ли результаты ('контрольная точка')? из этих двух отличаются друг от друга (если вес инициализации одинаков)? Я думал, что это должно быть то же самое, за исключением того, что первый ускоряется, но я получаю два разных результата, а второй дает намного лучший результат, чем первый. Буду очень признателен, если кто-нибудь сможет помочь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...