在即将到来的TensorFlow2.0中将对部分机制做出重大调整,其中之一就是将原有的静态图机制(使用静态图的TensorFlow工作流程如下图所示)调整为动态图机制,这将使得TensorFlow更加灵活和易用,在2.0版本到来之前,我们可以通过 tf.enable_eager_execution() 方法来启用动态图机制。
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
# 启用动态图机制
tf.enable_eager_execution()
# 设定学习率
learning_rate = 0.01
# 训练迭代次数
train_steps = 1000
# 构造训练数据
train_X = np.array([[3.3],[4.4],[5.5],[6.71],[6.93],[4.168],[9.799],[6.182],[7.59],[2.167],[7.042],[10.791],[5.313],[7.997],[5.654],[9.27],[3.1]],dtype = np.float32)
train_Y = np.array([[1.7],[2.76],[2.09],[3.19],[1.694],[1.573],[3.366],[2.596],[2.53],[1.221],[2.827],[3.465],[1.65],[2.904],[2.42],[2.94],[1.3]],dtype = np.float32)
# 输入数据
def network(data_x, data_y):
X = data_x
Y_ = data_y
# 定义模型参数
w = tf.Variable(tf.random_normal([1, 1]),name = "weight")
b = tf.Variable(tf.zeros([1]), name = "bias")
# 构建模型Y = weight*X + bias
Y = tf.add(tf.matmul(X, w), b)
# 定义损失函数
loss = tf.reduce_sum(tf.pow((Y-Y_), 2))/17
print(loss)
return loss
optimizer = tf.train.AdadeltaOptimizer(learning_rate= 0.01)
# 训练1000次
for i in range(0, 1000):
# 在动态图机制下,minimize要求接收一个函数
optimizer.minimize((lambda: network(train_X, train_Y)))
# 输 出:
···
tf.Tensor(54.92399, shape=(), dtype=float32)
tf.Tensor(6.5630927, shape=(), dtype=float32)
tf.Tensor(4.874648, shape=(), dtype=float32)
tf.Tensor(23.35061, shape=(), dtype=float32)
tf.Tensor(27.08449, shape=(), dtype=float32)
tf.Tensor(55.983494, shape=(), dtype=float32)
tf.Tensor(18.76203, shape=(), dtype=float32)
···
在这一节中我们对tf.enable_eager_execution() 方法进行了讲解,有任何的问题可以在评论区留言,我会尽快回复,谢谢支持!