Tensorflow 实现简单线性回归模型

    Tensorflow是深度学习常用的一个框架,从目前官方文档看,Tensorflow支持CNN、RNN和LSTM算法,这都是目前在Image,Speech和NLP领域最流行的深度神经网络模型。

    为了熟悉和理解tensorflow,先从简单的例子开始,本文介绍用tensorflow搭建一个结构为[1,10,1]的神经网络实现简单线性回归。

过程如下:

  1. 生成随机样本点
  2. 定义变量和模型
  3. 通过梯度下降法减小损失函数,优化模型
  4. 作图

代码如下:

# coding=utf-8

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

#用numpy生成200个样本
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]     #把(1,200)转化为(200,1)方便后面的矩阵相乘运算
noise = np.random.normal(0,0.02,x_data.shape)        #加入噪声数据,数据形状与x_data一样
y_data = np.square(x_data) + noise

#定义模型输入输出的占位符
x = tf.placeholder(tf.float32,[None,1])              
y = tf.placeholder(tf.float32,[None,1])

#定义神经网络隐含层
Weights_L1 = tf.Variable(tf.random_normal([1,10]))
biases_L1 = tf.Variable(tf.zeros([1,10]))
L1 = tf.nn.tanh(tf.matmul(x,Weights_L1) + biases_L1)

#定义神经网络输出层
Weights_L2 = tf.Variable(tf.random_normal([10,1]))
biases_L2 = tf.Variable(tf.zeros([1,1]))
prediction = tf.nn.tanh(tf.matmul(L1,Weights_L2) + biases_L2)

#定义均方误差作为损失函数,使用梯度下降优化器减小损失函数
loss =tf.reduce_mean(tf.square(prediction-y))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

#训练2000次
with tf.Session() as sess:
	sess.run(tf.global_variables_initializer())       #初始化变量
	for _ in range(2000):
		sess.run(train_step,feed_dict={x:x_data,y:y_data})

#训练完之后,作预测
	prediction_value = sess.run(prediction,feed_dict={x:x_data})

#作图
	plt.figure()
	plt.scatter(x_data,y_data)
	plt.plot(x_data,prediction_value,'r-',lw=5)
	plt.show()

结果如下:



这样,整个过程就结束了。

在后续的文章中,会介绍用tensorflow实现更复杂的模型。

猜你喜欢

转载自blog.csdn.net/Polaris47/article/details/80717530