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实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Python科学计算之Pandas详解
Jan 15 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python 编码规范整理
May 05 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
Python3进制之间的转换代码实例
Aug 24 Python
python datetime中strptime用法详解
Aug 29 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
python 获取当前目录下的文件目录和文件名实例代码详解
Mar 10 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 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
关于js与php互相传值的介绍
2013/06/25 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python查找指定具有相同内容文件的方法
2015/06/28 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
详解重置Django migration的常见方式
2019/02/15 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
生产车间实习自我鉴定
2013/09/23 职场文书
安全员岗位职责
2013/11/11 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
预备党员个人总结
2015/02/14 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
海弦WR-800F
2022/04/05 无线电
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js