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基本数据类型详细介绍
Mar 11 Python
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python中exit、return、sys.exit()等使用实例和区别
May 28 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
不要用强制方法杀掉python线程
Feb 26 Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
python中for循环变量作用域及用法详解
Nov 05 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
Python的pygame安装教程详解
Feb 10 Python
python 递归调用返回None的问题及解决方法
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生成随机数或者字符串的代码
2008/09/05 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python生成器表达式和列表解析
2016/03/10 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
教师专业自荐书范文
2014/02/10 职场文书
大学生秋游活动方案
2014/02/17 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers