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))

运行结果如下

神经网络 曲面拟合 神经网络拟合方程_TensorFlow

我们可以看到,随着训练次数的增加,Weights和bias的值越来越接近真实值。

(4)使用模型

训练好模型之后,用起来就比较容易了,往里面传入一个0.5,然后运行打印出结果来测试一下。

print(sess.run(pre,feed_dict={xs:0.5}))

 

至此我们就完成了神经网络的训练以及使用。

才疏学浅,若有不足,还望指正,万分感谢。