TensorFlow简单拟合网络例子

理解TensorFlow的运行方式非常重要,这里用一个简单的例子来讲解TensorFlow的运行方式。

TensorFlow的运行方式分为以下4个步骤:

  1. 加载数据及定义超参数
  2. 构建网络
  3. 训练模型
  4. 评估模型和进行预测

下面我们以一个神经网络为例子,讲解TensorFlow的运行方式。在这个例子中,我们构造一个满足一元二次函数y= ax^{2}+b的原始数据,然后构建一个简单的神经网络,仅仅包含一个输入层、一个隐藏层和一个输出层。通过TensorFlow讲隐藏层和输出层的weights和biases的值学习出来,看看随着训练次数的增加,损失是不是一直在不断减小。

程序使用Python完成,如果Python中没有安装TensorFlow和numpy参考上篇博客安装。

import tensorflow as tf
import numpy as np

#构造满足一元二次方程的函数
x_data=np.linspace(-1,1,300)[:,np.newaxis]#在-1,1之间生成300个等差数列,转换成一维数组作为x
noise=np.random.normal(0,0.05,x_data.shape) #加入一点噪声
y_data=np.square(x_data)-0.5+noise #构建一元二次方程,并加入噪声

#定义x和y的占位符来作为将要收入神经网络的变量
xs=tf.placeholder(tf.float32,[None,1])
ys=tf.placeholder(tf.float32,[None,1])

#定义添加神经网络的函数
def add_layrt(inputs,in_size,out_size,activation_function=None):
    #构建权重,in_size×out_size大小的矩阵
    weights=tf.Variable(tf.random_normal([in_size,out_size]))
    #构建偏置,1×out_size的矩阵
    biases=tf.Variable(tf.zeros([1,out_size])+0.1)
    #矩阵相乘
    Wx_plus_b=tf.matmul(inputs,weights)+biases
    if activation_function is None:
        outputs=Wx_plus_b
    else:
        outputs=activation_function(Wx_plus_b)
    return(outputs)#得到输出结果
#构建隐藏层,有20个神经元
h1=add_layrt(xs,1,20,activation_function=tf.nn.relu)
#输出层,有1个神经元
prediction=add_layrt(h1,20,1,activation_function=None)

#损失函数:求输出层和真实值的平方差求和再取平均
loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),reduction_indices=[1]))
#使用梯度下降以0.1的学习率最小化损失
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)

#初始化所有变量,这里如果报错可以改为tf.initialize_all_variables()
init=tf.global_variables_initializer()
sess=tf.Session()
sess.run(init)

for i in range(1000):#训练1000次
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
    if i % 50 ==0:#每50次打印一次损失值
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))

输出结果如下所示

我们可以看到损失值从一开始的1.5159迅速开始减小,并一直往小的趋势下降,说明我们的网络学到了东西。

猜你喜欢

转载自blog.csdn.net/qq_38375282/article/details/81382071
今日推荐