Eager模式及自定义训练
Tensorflow的eager模式是一个命令式编程环境,它可以使我们立即评估操作的结果,无需构建计算图
Tensorflow默认就是eager模式
import tensorflow as tf
tf.__version__
‘2.0.0’
# 判断是否处于eager模式
tf.executing_eagerly()
True
x = [[2]]
result = tf.matmul(x, x)
print(result)
tf.Tensor([[4]], shape=(1, 1), dtype=int32)
print(result.numpy())
[[4]]
变量操作
# 创建变量
var = tf.Variable(1)
var
<tf.Variable ‘Variable:0’ shape=() dtype=int32, numpy=1>
# 修改变量的值
var.assign(5)
var
<tf.Variable ‘Variable:0’ shape=() dtype=int32, numpy=5>
# 读取变量的值
var.read_value()
<tf.Tensor: id=14, shape=(), dtype=int32, numpy=5>
微分运算
# 变量求微分(必须是float类型)
w = tf.Variable([[1.0]])
# 记录运算过程
with tf.GradientTape() as t:
loss = w * w
print(t.gradient(loss, w))
tf.Tensor([[2.]], shape=(1, 1), dtype=float32)
# 常量求微分
w = tf.constant([[2.0]])
with tf.GradientTape() as t:
# 追踪w的变化
t.watch(w)
loss = w * w
print(t.gradient(loss, w))
tf.Tensor([[4.]], shape=(1, 1), dtype=float32)
# 以上操作只能计算一次微分,要计算多次微分,需要加上参数persistent=True
w = tf.Variable([[1.0]])
# 记录运算过程
with tf.GradientTape(persistent