机器学习7:tensorflow入门小程序解析

机器学习7:tensorflow入门小程序解析

         本文中的代码示例来自《TensorFlow深度学习应用实践》一书。

(1)代码功能简介:

         示例代码的功能是利用tensorflow,通过单隐层和双隐层两种结构实现一个简单的一元回归分析功能。

         待回归的函数为:y=4x+1,进行训练的输入数据为随机数x'和加了正态分布噪声的y'=4x'+1+Noise,希望训练得到的模型结果无限接近于y=4x+1

(2)单隐层的回归分析:

          ①代码分析:

# 单隐层一元回归分析模型
# 导入模块
import tensorflow as tf
import numpy as np


# 1.生成随机输入数、偏差为0.05的正态分布的噪声数、y=4x+1线性曲线
inputX = np.random.rand(3000, 1)
noise = np.random.normal(0, 0.05, inputX.shape)
outputY = inputX*4+1+noise


# 2.创建有一个隐层的反馈神经网络去计算线性曲线
# (1)隐藏层变量weight1、bias1
weight1 = tf.Variable(np.random.rand(inputX.shape[1], 4))
bias1 = tf.Variable(np.random.rand(inputX.shape[1], 4))

# (2)占位符x1、模型目标y1_、真实值占位符y
x1 = tf.placeholder(tf.float64, [None, 1])
y1_ = tf.matmul(x1, weight1)+bias1
y = tf.placeholder(tf.float64, [None, 1])

# (3)定义最小二乘法的损失函数
loss = tf.reduce_mean(tf.reduce_sum(tf.square((y1_-y)), reduction_indices=[1]))

# (4)采用梯度下降算法计算的训练方法
train = tf.train.GradientDescentOptimizer(0.25).minimize(loss)


# 3.启动会话
# (1)数值初始化
init = tf.initialize_all_variables()

# (2)启动会话,框架准备开始执行任务
sess = tf.Session()
sess.run(init)

# (3)循环下启动会话,将设定的值feed入训练模型,训练1000次
for i in range(1000):
    sess.run(train, feed_dict={x1: inputX, y: outputY})

# (4)训练完成后打印结果
print(weight1.eval(sess))
print('----------------')
print(bias1.eval(sess))
print('----------------结果是-------------------')
x_data = np.matrix(([1.], [2.], [3.]))
print(sess.run(y1_, feed_dict={x1: x_data}))

         ②运行结果:

            测试模型时输入三个数据:1,2,3,对应的y=4x+1的理想值为:5,9,13,由下图可见,训练后的模型的运行结果为5.00344735、9.005725、13.00800265,与5、9、13很接近。

(3)双隐层的回归分析:

         ①代码分析:

            在上一段代码的基础上,新增一个隐藏层,将第一层隐藏层的输出作为新增隐藏层的输入,将新增隐藏层的输出作为输出层的输入,其它部分基本没有太大区别。

# 双隐层一元回归分析模型
# 导入模块
import tensorflow as tf
import numpy as np


# 1.生成随机输入数、偏差为0.05的正态分布的噪声数、y=4x+1线性曲线
inputX = np.random.rand(3000, 1)
noise = np.random.normal(0, 0.05, inputX.shape)
outputY = inputX*4+1+noise


# 2.创建有一个隐层的反馈神经网络去计算线性曲线
# (1)隐藏层1
weight1 = tf.Variable(np.random.rand(inputX.shape[1], 4))
bias1 = tf.Variable(np.random.rand(inputX.shape[1], 4))
x1 = tf.placeholder(tf.float64, [None, 1])
y1_ = tf.matmul(x1, weight1)+bias1

# (2)隐藏层2
weight2 = tf.Variable(np.random.rand(4, 1))
bias2 = tf.Variable(np.random.rand(inputX.shape[1], 1))
y2_ = tf.matmul(y1_, weight2)+bias2

# (3)真实值占位符y
y = tf.placeholder(tf.float64, [None, 1])
# (4)定义最小二乘法的损失函数
loss = tf.reduce_mean(tf.reduce_sum(tf.square((y2_-y)), reduction_indices=[1]))
# (5)采用梯度下降算法计算的训练方法
train = tf.train.GradientDescentOptimizer(0.25).minimize(loss)


# 3.启动会话
# (1)数值初始化
init = tf.initialize_all_variables()

# (2)启动会话,框架准备开始执行任务
sess = tf.Session()
sess.run(init)

# (3)循环下启动会话,将设定的值feed入训练模型
for i in range(1000):
    sess.run(train, feed_dict={x1: inputX, y: outputY})

# (4)训练完成后打印结果
print(weight1.eval(sess))
print('----------------')
print(weight2.eval(sess))
print('----------------')
print(bias1.eval(sess))
print('----------------')
print(bias2.eval(sess))
print('----------------结果是-------------------')
x_data = np.matrix(([1.], [2.], [3.]))
print(sess.run(y2_, feed_dict={x1: x_data}))

          ②运行结果:

发布了84 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39504171/article/details/99562619