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 with statement 进行文件操作指南
Aug 22 Python
Python线程中对join方法的运用的教程
Apr 09 Python
简单介绍Python中的decode()方法的使用
May 18 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
Feb 04 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
python实现小程序推送页面收录脚本
Apr 20 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
python 下载m3u8视频的示例代码
Nov 11 Python
Python多线程 Queue 模块常见用法
Jul 04 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应用程序的七个习惯深入分析
2013/06/08 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
numpy自动生成数组详解
2017/12/15 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
医学院护理专业应届生求职信
2013/11/12 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
捐书活动倡议书
2015/04/27 职场文书
护士2015年终工作总结
2015/04/29 职场文书
会议营销主持词
2015/07/03 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
python中对列表的删除和添加方法详解
2022/02/24 Python
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
Nginx 常用配置
2022/05/15 Servers