TensorFlow версия 2.0.0
Я обучаю 2 каскадных модели, model1 и model2, на Tensorflow 2.0.0, которые будут использоваться на 2 разных компьютерах. В настоящее время я имитирую его на одном компьютере. Если я тренирую модели на одной градиентной ленте, она тренируется отлично, вычисляя градиенты следующим образом:
import tensorflow as tf
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
with tf.GradientTape(persistent=True) as tape:
features = model1(x_batch_train)
logits = model2(features)
loss_value = loss_fn(y_batch_train, logits)
# Computing gradients for model 2
grads2 = tape.gradient(loss_value, model2.trainable_variables)
# Computing gradients to pass to model 1
grads_pass = tape.gradient(loss_value, features)
# Computing gradients for model 1
grads1 = tape.gradient(features, model1.trainable_variables, output_gradients=grads_pass)
Однако, если я хочу разделить обучение на 2 разных компьютера, я должен иметь градиентную ленту в каждый из них, но затем вычисленные результаты различны!
import tensorflow as tf
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
with tf.GradientTape() as tape1:
features = model1(x_batch_train)
with tf.GradientTape(persistent=True) as tape2:
logits = model2(features)
loss_value = loss_fn(y_batch_train, logits)
# Computing gradients for model 2
grads2 = tape2.gradient(loss_value, model2.trainable_variables)
# Computing gradients to pass to model 1
grads_pass = tape2.gradient(loss_value, features)
# Computing gradients for model 1
grads1 = tape1.gradient(features, model1.trainable_variables, output_gradients=grads_pass)
Операции, записанные на лентах, независимы, так почему это происходит?