Tensorflow 入门学习5 建立一个隐藏层的神经网络实现回归分析

Tensorflow 入门学习5 建立一个隐藏层的神经网络实现回归分析


本文学习资源来自《TensorFlow 深度学习应用实践》

说明

这里写图片描述

程序

下面的示例程序需要安装matplotlib库:

pip install matplotlib

这是TensorFlow的入门程序,是一个回归分析的具体应用。
上图是一个需要设计的神经网络,这里准备建立一个有一个隐藏层的神经网络去实现回归分析,这个神经网络有输入层、隐藏层与输出层。下面程序具体实现了这个神经网络模型。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt  # 绘图库

"""
这里是一个非常好的大数据验证结果,随着数据量的上升,集合的结果也越来越接近真实值,
这也是反馈神经网络的一个比较好的应用
这里不是很需要各种激励函数
而对于dropout,这里可以看到加上dropout,loss的值更快
随着数据量的上升,结果就更加接近于真实值。
"""
# 使用NumPy的随机生成数据功能生成一个y=4x+1的线性曲线,数据inputX、noise为随机生成的输入数与满足偏差为0.05的正态分布的噪音数
inputX = np.random.rand(3000, 1)
noise = np.random.normal(0, 0.05, inputX.shape)
outputY = inputX * 4 + 1 + noise
print("------inputX")
print(inputX)
print("------noise")
print(noise)
print("------outputY")
print(outputY)
print("------")
# 创建了有一个隐藏层的反馈神经网络去计算这个线性曲线
# 神经网络隐藏层的变量,这两个变量在后续的图计算过程中需要重新根据误差不停地重新赋值,所以设置为tf变量
weight1 = tf.Variable(np.random.rand(inputX.shape[1], 4))
bias1 = tf.Variable(np.random.rand(inputX.shape[1], 4))

# 占位符,作用是在tf图计算时不停地输入数据
x1 = tf.placeholder(tf.float64, [None, 1])
# 神经网络设立的模型目标,形式为 Y=x*w+b,即这是一个一元线性回归模型
y1_ = tf.matmul(x1, weight1) + bias1

y = tf.placeholder(tf.float64, [None, 1])
# 损失函数,这里采用的是最小二乘法的损失函数,即计算模型输出值与真实值之间的误差的最小二乘法
loss = tf.reduce_mean(tf.reduce_sum(tf.square((y1_ - y)), reduction_indices=[1]))

train = tf.train.GradientDescentOptimizer(0.25).minimize(loss)  # 选择梯度下降的训练方法

# 数据初始化
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

for i in range(1000):
    sess.run(train, feed_dict={x1: inputX, y: outputY})
print(sess.run([weight1, bias1]))

x_data = np.matrix([[1.], [2.], [3.]])
print(sess.run(y1_, feed_dict={x1: x_data}))


# 画样本点
plt.figure(figsize=(8, 6))       # 指定图像比例: 8:6
plt.scatter(inputX, outputY, color="green", label="sample data", linewidth=2)
plt.plot(inputX, sess.run(weight1)*inputX + sess.run(bias1))
plt.xlabel('x')
plt.xlim(-2,2)
plt.ylabel('y')
plt.legend()
plt.show()

运行结果:

[array([[ 4.00274578,  4.00274578,  4.00274578,  4.00274578]]), array([[ 0.99885158,  0.99885158,  0.99885158,  0.99885158]])]
[[  5.00159736   5.00159736   5.00159736   5.00159736]
 [  9.00434314   9.00434314   9.00434314   9.00434314]
 [ 13.00708892  13.00708892  13.00708892  13.00708892]]

在这里插入图片描述
这个是一个最简单的一元回归分析函数。

一个问题处理

  File "t1.py", line 6, in <module>
    import matplotlib.pyplot as plt  # 绘图库
  File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 72, in <module>
    from matplotlib.backends import pylab_setup
  File "/usr/lib/python2.7/dist-packages/matplotlib/backends/__init__.py", line 14, in <module>
    line for line in traceback.format_stack()
  File "/usr/lib/python2.7/dist-packages/matplotlib/backends/__init__.py", line 16, in <genexpr>
    if not line.startswith('  File "<frozen importlib._bootstrap'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 75: ordinal not in range(128)

处理方式:打开报错的__init__.py行,将字符前加一个b,如:

_backend_loading_tb = b"".join(
    line for line in traceback.format_stack()
    # Filter out line noise from importlib line.
    if not line.startswith(b'  File "<frozen importlib._bootstrap'))

代码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值