线性回归实例
来一个线性回归问题实例,在开始之前我们先明确一些问题,也就是我们要训练模型几个步骤,在李宏毅教授的课程中他提到会分为建立模型(也就是函数集合),然后就是定义损失函数,最后根据损失函数进行优化找到最优的函数。
不过我们对于简单的神经网,个人总结了一点经验,首先是准备好训练和测试数据集,然后处理这些数据以便训练,然后就是定义输入变量,因为都是矩阵和向量乘法,在设计神经网网络时候我们需要考虑结构以及矩阵的维度和矩阵元素类型,这样运算可以顺利进行。然后就是定义损失函数,接下来是定义优化找到让损失函数最小的那个方程也就是我们最优解,然后用最优解方程来测试我们测试数据,来评估我们模型精确度。
准备数据
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
learning_rate = 0.01
epochs = 200
n_samples = 30
train_x = np.linspace(0,20,n_samples)
train_y = 3 * train_x + 4* np.random.rand(n_samples)
plt.plot(train_x,train_y,'o')
plt.show()
train_x_data.png
plt.plot(train_x,train_y,'o')
plt.plot(train_x, 3 * train_x)
plt.show()
创建变量
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
W = tf.Variable(np.random.randn,name='weights')
B = tf.Variable(np.random.randn,name='bias')
定义计算图
定义损失函数
然后定义评估函数也就是我们提到损失函数
cost = tf.reduce_sum((pred - Y) ** 2) / (2 * n_samples)
用计算出估计值(pred) 减去实际值,也就是估计值到真实值的距离然后平方来去掉负数后取均值。
优化
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
我们优化就是需要让损失函数最小,所以最小化 cost 函数的参数就是最好的参数
训练
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(epochs):
for x, y in zip(train_x,train_y):
sess.run(optimizer,feed_dict={X:x,Y:y})
if not epoch % 20:
c = sess.run(cost,feed_dict={X:train_x,Y:train_y})
w = sess.run(W)
b = sess.run(B)
print(f'epoch:{epoch:04d} c={c:.4f} w={w:.4f} b={b:.4f}')
设计好我们计算图后,就可以开始进行计算了,我们所有计算图都需要放到
验证结果
weight = sess.run(W)
bias = sess.run(B)
plt.plot(train_x,train_y,'o')
plt.plot(train_x,weight * train_x + bias)
plt.show()
train_data.png
epoch:0000 c=78.2851 w=1.8528 b=1.4544
epoch:0020 c=7.5476 w=2.8999 b=1.4118
epoch:0040 c=7.4682 w=2.9079 b=1.2879
epoch:0060 c=7.3967 w=2.9155 b=1.1703
epoch:0080 c=7.3324 w=2.9226 b=1.0587
epoch:0100 c=7.2745 w=2.9295 b=0.9528
epoch:0120 c=7.2224 w=2.9359 b=0.8522
epoch:0140 c=7.1755 w=2.9421 b=0.7568
epoch:0160 c=7.1334 w=2.9479 b=0.6662
epoch:0180 c=7.0954 w=2.9535 b=0.5802
网友评论