"""
TensorFlow 通过优化函数来实现更新变量和最小化损失函数来实现误差的反向传播
一旦声明优化函数后,TensorFlow 将通过它在所有的计算图中解决反向传播项
"""
# 该程序用于实现回归算法的反向传播
import os
import numpy as np
import tensorflow as tf
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
s = tf.Session()
# 生成数据,创建占位符和变量 A
x_vals = np.random.normal(1, 0.1, 100) # 创建均值为 1、标准差为 0.1 的正态分布
y_vals = np.repeat(10., 100)
x_data = tf.placeholder(shape=[1], dtype=tf.float32)
y_target = tf.placeholder(shape=[1], dtype=tf.float32)
A = tf.Variable(tf.random_normal(shape=[1]))
# 增加乘法操作
my_output = tf.multiply(x_data, A)
# 增加 L2 正则损失函数
loss = tf.square(my_output - y_target)
# 运行之前需要初始化变量
init = tf.global_variables_initializer()
s.run(init)
# 声明变量的优化器
my_opt = tf.train.GradientDescentOptimizer(learning_rate=0.02)
train_step = my_opt.minimize(loss)
# 训练算法,每 25 次迭代打印返回结果
for i in range(100):
rand_index = np.random.choice(100)
rand_x = [x_vals[rand_index]]
rand_y = [y_vals[rand_index]]
s.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})
if (i + 1) % 5 == 0:
print('Step #' + str(i+1) + ' A = ' + str(s.run(A)))
print('Loss = ' + str(s.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})))