tensorflow建立一个简单的神经网络的方法


Posted in Python onFebruary 10, 2018

本笔记目的是通过tensorflow实现一个两层的神经网络。目的是实现一个二次函数的拟合。

如何添加一层网络

代码如下:

def add_layer(inputs, in_size, out_size, activation_function=None):
  # add one more layer and return the output of this layer
  Weights = tf.Variable(tf.random_normal([in_size, 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

注意该函数中是xW+b,而不是Wx+b。所以要注意乘法的顺序。x应该定义为[类别数量, 数据数量], W定义为[数据类别,类别数量]。

创建一些数据

# Make up some real data
x_data = np.linspace(-1,1,300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

numpy的linspace函数能够产生等差数列。start,stop决定等差数列的起止值。endpoint参数指定包不包括终点值。

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)[source] 
Return evenly spaced numbers over a specified interval. 
Returns num evenly spaced samples, calculated over the interval [start, stop].

tensorflow建立一个简单的神经网络的方法

noise函数为添加噪声所用,这样二次函数的点不会与二次函数曲线完全重合。

numpy的newaxis可以新增一个维度而不需要重新创建相应的shape在赋值,非常方便,如上面的例子中就将x_data从一维变成了二维。

添加占位符,用作输入

# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

添加隐藏层和输出层

# add hidden layer
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# add output layer
prediction = add_layer(l1, 10, 1, activation_function=None)

计算误差,并用梯度下降使得误差最小

# the error between prediciton and real data
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

完整代码如下:

from __future__ import print_function
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

def add_layer(inputs, in_size, out_size, activation_function=None):
  # add one more layer and return the output of this layer
  Weights = tf.Variable(tf.random_normal([in_size, 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

# Make up some real data
x_data = np.linspace(-1,1,300)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape)
y_data = np.square(x_data) - 0.5 + noise

# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
# add hidden layer
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
# add output layer
prediction = add_layer(l1, 10, 1, activation_function=None)

# the error between prediciton and real data
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),
           reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

# important step
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

# plot the real data
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data, y_data)
plt.ion()
plt.show()

for i in range(1000):
  # training
  sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
  if i % 50 == 0:
    # to visualize the result and improvement
    try:
      ax.lines.remove(lines[0])
    except Exception:
      pass
    prediction_value = sess.run(prediction, feed_dict={xs: x_data})
    # plot the prediction
    lines = ax.plot(x_data, prediction_value, 'r-', lw=5)
    plt.pause(0.1)

运行结果:

tensorflow建立一个简单的神经网络的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python help()函数用法详解
Mar 11 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
Python 判断奇数偶数的方法
Dec 20 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
Python-split()函数实例用法讲解
Dec 18 Python
Python学习之异常中的finally使用详解
Mar 16 Python
python取代netcat过程分析
Feb 10 #Python
浅谈Python黑帽子取代netcat
Feb 10 #Python
python3爬取淘宝信息代码分析
Feb 10 #Python
Python中property属性实例解析
Feb 10 #Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 #Python
Python中协程用法代码详解
Feb 10 #Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 #Python
You might like
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
Python实现图片滑动式验证识别方法
2017/11/09 Python
pytorch forward两个参数实例
2020/01/17 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
大学生创业计划书的格式要求
2013/12/29 职场文书
自我评价格式
2014/01/06 职场文书
文案策划求职信
2014/03/18 职场文书
女生节标语
2014/06/26 职场文书
践行三严三实心得体会
2014/10/13 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
基层工作经验证明样本
2014/11/16 职场文书
2014年防汛工作总结
2014/12/08 职场文书
信仰纪录片观后感
2015/06/08 职场文书
七一晚会主持词
2015/06/29 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS