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