TensorFlow中,如果要对一个参数进行训练,那么这个参数必须是一个变量类tf.Variable,tf.Variable类会在反向传播的时候进行梯度计算并保存梯度信息.
# coding: utf-8
# @时间 : 2022/3/19 2:56 下午
# @作者 : 那美那美 V: qwentest123
import tensorflow as tf
w = tf.Variable([[1.], [2.]])
x = tf.constant([[3., 4.]])
r1 = tf.matmul(w, x) # 矩阵内积
w = w.assign([[5.], [6.]]) # 重新分配值
r2 = tf.matmul(w, x)
print('参与计算1:', r1,'\n参与计算2:', r2)
# tf.Variable类会在反向传播的时候进行梯度计算并保存梯度信息
with tf.GradientTape(persistent=True) as tape:
trainable = tf.Variable(1.)
non_trainable = tf.Variable(2., trainable=False)
x1 = trainable * 2.
x2 = non_trainable * 3.
print(tape.gradient(x1, trainable))
运行结果:
参与计算1: tf.Tensor(
[[3. 4.]
[6. 8.]], shape=(2, 2), dtype=float32)
参与计算2: tf.Tensor(
[[15. 20.]
[18. 24.]], shape=(2, 2), dtype=float32)
tf.Tensor(2.0, shape=(), dtype=float32)