AttributeError:模块'tensorflow'没有属性'assign'

问题描述 投票:0回答:1

我正在尝试将以前的tf1代码迁移到tf2。不幸的是我的代码没有处于急切模式,所以我遇到了更多困难。我做了以下代码(尚未训练),然后进入错误消息:

Traceback (most recent call last):
    training_op = tf.assign(W, W - learning_rate * gradients)
AttributeError: module 'tensorflow' has no attribute 'assign'

这是我的最小代码示例PS:它必须使用复数!

# Data pre-processing
    m = 50
    n = 20
    x_train, y_train, x_test, y_test = get_my_data(x, y, m, n) # data x of size mxn

    # Network Declaration
    input_size = n
    output_size = 1
    learning_rate = 0.001  # The optimization learning rate
    # Create weight matrix initialized randomely from N~(0, 0.01)
    W = tf.Variable(tf.complex(np.random.rand(input_size, output_size),
                               np.random.rand(input_size, output_size)), name="weights")

    with tf.GradientTape() as gtape:
        y_out = tf.matmul(x_train, W, name="out")
        error = y - y_out
        loss = tf.reduce_mean(tf.square(tf.abs(error)), name="mse")
        gradients = gtape.gradient(loss, [W])[0]
        training_op = tf.assign(W, W - learning_rate * gradients)

我手动执行此操作,因为除非他们更改了该设置,否则优化器不支持复数,因此我“手动”执行。

python tensorflow
1个回答
0
投票

tf.assign*函数可用作TF 2.0中tf.Variable上的方法。因此,您的示例可以重写为

tf.Variable

注意,与TF 1.X中的with tf.GradientTape() as gtape: ... W.assign_sub(learning_rate * gradients) 不同,tf.assign将急切地执行分配。

© www.soinside.com 2019 - 2024. All rights reserved.