TensorFlow是Google开源的一个深度学习框架,之前接触过一些但是没有好好的深入了解,从这篇文章开始记录自己所学到的知识。本次主要记录一个简单的例子,以后会慢慢深入,包括多层神经网络,卷积神经网络,循环神经网络,自编码网络,深度神经网络和对抗神经网络。
实例描述
假设有一组数据集,其中x与y的对应关系为:y = 3x + 0.5。我们想让神经网络学习这些样本,并从中找到这个规律,通俗来说就是让神经网络学习到方程中的参数3和0.5 。
实现过程
(1)准备数据
首先用numpy生成1个含有100个数据的随机序列x,然后写出y与x的对应关系。
import tensorflow as tf
import numpy as np
x = np.linspace(-1,1,100)
b = 0.5
y = 3 * x + b
(2)创建模型
这里xs,ys是占位符,代表了x和y的输入。Weights和bias代表了权值和偏置,pre代表了Weights * xs + bias的结果,也就是预测的结果。
xs = tf.placeholder(tf.float32)
ys = tf.placeholder(tf.float32)
Weights = tf.Variable(tf.random_normal([1]))
biases = tf.Variable(tf.zeros([1]) + 0.1)
pre = tf.multiply(Weights,xs) + biases
接下来是反向搭建模型,神经网络在训练过程中数据的流向有两个方向。简单来说首先通过正向生成一个值,然后在与实际值进行比较,观察其中的差距,再通过反向过程调整参数,也就是这里的Weights和bias。
这里的损失函数采用平方损失,学习率设置为0.1,优化器选择GradientDescentOptimizer也就是一个梯度下降的算法。这里学习率可以随意设置,一般来说这个值是小于1的,它代表了参数调整的速度。这个值越大,代表调整速度越快,但是不精确;值越小,表明调整的精度越高,但是速度慢。我们这里选择0.1就可以。
loss = tf.reduce_mean(tf.square(pre - ys))
optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
(3)训练模型
这里先初始化所需要的变量然后进行迭代,迭代50次,每5次打印一下Weights和bias的值。
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(50):
sess.run(optimizer,feed_dict={xs:x,ys:y})
if i % 5 == 0:
print(sess.run(Weights),sess.run(biases))
运行结果如下
我们可以看到,随着训练次数的增加,Weights和bias的值越来越接近真实值。
(4)使用模型
训练好模型之后,用起来就比较容易了,往里面传入一个0.5,然后运行打印出结果来测试一下。
print(sess.run(pre,feed_dict={xs:0.5}))
至此我们就完成了神经网络的训练以及使用。
才疏学浅,若有不足,还望指正,万分感谢。