TensorFlow 2 tf.function decorator - PullRequest
       3

TensorFlow 2 tf.function decorator

0 голосов
/ 04 февраля 2020

У меня есть TensorFlow 2.0 и Python 3.7.5.

Я написал следующий код для выполнения мини-градиентного спуска:

@tf.function
def train_one_step(model, mask_model, optimizer, x, y):
    '''
    Function to compute one step of gradient descent optimization
    '''
    with tf.GradientTape() as tape:
        # Make predictions using defined model-
        y_pred = model(x)

        # Compute loss-
        loss = loss_fn(y, y_pred)

    # Compute gradients wrt defined loss and weights and biases-
    grads = tape.gradient(loss, model.trainable_variables)

    # type(grads)
    # list

    # List to hold element-wise multiplication between-
    # computed gradient and masks-
    grad_mask_mul = []

    # Perform element-wise multiplication between computed gradients and masks-
    for grad_layer, mask in zip(grads, mask_model.trainable_weights):
        grad_mask_mul.append(tf.math.multiply(grad_layer, mask))

    # Apply computed gradients to model's weights and biases-
    optimizer.apply_gradients(zip(grad_mask_mul, model.trainable_variables))

    # Compute accuracy-
    train_loss(loss)
    train_accuracy(y, y_pred)

    return None

В коде: «mask_model» - это маска, которая имеет значение 0 или 1. Использование «mask_model» предназначено для контроля того, какие параметры обучаются (так как 0 * градиентный спуск = 0).

У меня вопрос, я использую Переменная списка "grad_mask_mul" внутри "train_one_step ()" оформленной функции TensorFlow. Может ли это вызвать какие-либо проблемы, такие как:

ValueError: функция с декорированием tf.function пыталась создать переменные при первом вызове.

Или вы, ребята, видите какая-то проблема использования списочной переменной внутри функции с тензорным потоком?

Спасибо!

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