【TF-3-1】Tensorflow--简单线性拟合
一、代码:
1 import numpy as np 2 import tensorflow as tf 3 # 1. 构造一个数据 4 np.random.seed(28) 5 N = 100 6 x = np.linspace(0, 6, N) + np.random.normal(loc=0.0, scale=2, size=N) 7 y = 14 * x - 7 + np.random.normal(loc=0.0, scale=5.0, size=N) 8 # 将x和y设置成为矩阵 9 x.shape = -1, 1 10 y.shape = -1, 1 11 # 2. 模型构建 12 # 定义一个变量w和变量b,初始化 13 # random_uniform:(random:随机产生数据,uniform:均匀分布) =>产生一个服从均匀分布的随机数列 14 # shape: 产生多少数据/产生的数据格式是什么; minval:均匀分布中的可能出现的最小值,maxval: 均匀分布中可能出现的最大值 15 w = tf.Variable(initial_value=tf.random_uniform(shape=[1], minval=-1.0, maxval=1.0), name='w') 16 b = tf.Variable(initial_value=tf.zeros([1]), name='b') 17 # 构建一个预测值 18 y_hat = w * x + b 19 # 构建一个损失函数:以MSE作为损失函数(预测值和实际值之间的平方和) 20 loss = tf.reduce_mean(tf.square(y_hat - y), name='loss') 21 # 以随机梯度下降的方式优化损失函数 22 optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.05) 23 # 在优化的过程中,是让那个函数最小化 24 train = optimizer.minimize(loss, name='train') 25 # 全局变量更新 26 init_op = tf.global_variables_initializer() 27 # 运行 28 def print_info(r_w, r_b, r_loss): 29 print("w={},b={},loss={}".format(r_w, r_b, r_loss)) 30 with tf.Session() as sess: 31 # 初始化 32 sess.run(init_op) 33 # 输出初始化的w、b、loss 34 r_w, r_b, r_loss = sess.run([w, b, loss]) 35 print_info(r_w, r_b, r_loss) 36 # 进行训练(n次) 37 for step in range(100): 38 # 模型训练 39 sess.run(train) 40 # 输出训练后的w、b、loss 41 r_w, r_b, r_loss = sess.run([w, b, loss]) 42 print_info(r_w, r_b, r_loss) 43
二、结果
截取后面一部分: