TensorFlow平台下Python实现神经网络


Posted in Python onMarch 10, 2018

本篇文章主要通过一个简单的例子来实现神经网络。训练数据是随机产生的模拟数据集,解决二分类问题。

下面我们首先说一下,训练神经网络的一般过程:

1.定义神经网络的结构和前向传播的输出结果

2.定义损失函数以及反向传播优化的算法

3.生成会话(Session)并且在训练数据上反复运行反向传播优化算法

要记住的一点是,无论神经网络的结构如何变化,以上三个步骤是不会改变的。

完整代码如下:

import tensorflow as tf 
#导入TensorFlow工具包并简称为tf 
 
from numpy.random import RandomState 
#导入numpy工具包,生成模拟数据集 
 
batch_size = 8 
#定义训练数据batch的大小 
 
w1 = tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) 
w2 = tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) 
#分别定义一二层和二三层之间的网络参数,标准差为1,随机产生的数保持一致 
 
x = tf.placeholder(tf.float32,shape=(None,2),name='x-input') 
y_ = tf.placeholder(tf.float32,shape=(None,1),name='y-input') 
#输入为两个维度,即两个特征,输出为一个标签,声明数据类型float32,None即一个batch大小 
#y_是真实的标签 
 
a = tf.matmul(x,w1) 
y = tf.matmul(a,w2) 
#定义神经网络前向传播过程 
 
cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y,1e-10,1.0))) 
train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy) 
#定义损失函数和反向传播算法 
 
rdm = RandomState(1) 
dataset_size = 128 
#产生128组数据 
X = rdm.rand(dataset_size,2) 
Y = [[int(x1+x2 < 1)] for (x1,x2) in X] 
#将所有x1+x2<1的样本视为正样本,表示为1;其余为0 
 
#创建会话来运行TensorFlow程序 
with tf.Session() as sess: 
 init_op = tf.global_variables_initializer() 
 #初始化变量 
 sess.run(init_op) 
 
 print(sess.run(w1)) 
 print(sess.run(w2)) 
 #打印出训练网络之前网络参数的值 
 
 STEPS = 5000 
 #设置训练的轮数 
 for i in range(STEPS): 
  start = (i * batch_size) % dataset_size 
  end = min(start+batch_size,dataset_size) 
 #每次选取batch_size个样本进行训练 
  
  sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]}) 
 #通过选取的样本训练神经网络并更新参数 
  
  if i%1000 == 0: 
   total_cross_entropy = sess.run(cross_entropy,feed_dict={x:X,y_:Y}) 
   print("After %d training step(s),cross entropy on all data is %g" % (i,total_cross_entropy)) 
 #每隔一段时间计算在所有数据上的交叉熵并输出,随着训练的进行,交叉熵逐渐变小 
 
 print(sess.run(w1)) 
 print(sess.run(w2)) 
 #打印出训练之后神经网络参数的值

运行结果如下:

TensorFlow平台下Python实现神经网络

结果说明:

首先是打印出训练之前的网络参数,也就是随机产生的参数值,然后将训练过程中每隔1000次的交叉熵输出,发现交叉熵在逐渐减小,说明分类的性能在变好。最后是训练网络结束后网络的参数。

分享一个图形化神经网络训练过程的网站:点这里,可以自己定义网络参数的大小,层数以及学习速率的大小,并且训练过程会以很直观的形式展示出来。比如:

TensorFlow平台下Python实现神经网络

 TensorFlow平台下Python实现神经网络

以上对于神经网络训练过程可以有一个很深刻的理解。

最后,再补充一些TensorFlow相关的知识:

1.TensorFlow计算模型-计算图

       Tensor表示张量,可以简单的理解为多维数据结构;Flow则体现了它的计算模型。Flow翻译过来是“流”,它直观地表达了张量之间通过计算相互转换的过程。TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

指定GPU方法,命令如下:

import tensorflow as tf
a = tf.constant([1.0,2.0],name=“a”)
b = tf.constant([3.0,4.0],name=“b”)
g = tf.Graph()
with g.device(/gpu:0):
result = a + b
sess = tf.Session()
sess.run(result)

2.TensorFlow数据模型-张量

      张量是管理数据的形式。零阶张量表示标量,第一阶张量为向量,也就是一维数组,一般来说,第n阶张量可以理解为一个n维数组。张量本身不存储运算的结果,它只是得到对结果的一个引用。可以使用tf.Session().run(result)语句来得到计算结果。

3.TensorFlow运行模型-会话

我们使用session来执行定义好的运算。

主要有以下两种方式,第一种会产生内存泄漏,第二种不会有这种问题。

#创建一个会话
sess = tf.Session()
sess.run(…)
#关闭会话使得本次运行中使用的资源得到释放
sess.close()

第二种方式是通过Python的上下文资源管理器来使用会话。

with tf.Session() as sess:
sess.run(…)

此种方式自动关闭和自动进行资源的释放

4.TensorFlow-神经网络例子

使用神经网络解决分类问题可以分为以下四个步骤:
①提取问题中实体的特征向量作为输入。
②定义神经网络的结构,并定义如何从神经网络的输入得到输出。这个过程就是神经网络的前向传播算法。
③通过训练数据来调整神经网络中参数的设置,这就是训练网络的过程。
④使用训练好的神经网络来预测未知的数据  

在TensorFlow中声明一个2*3的矩阵变量的方法:

weight = tf.Variable(tf.random_normal([2,3],stddev=2))

 即表示为方差为0、标准差为2的正态分布

在TensorFlow中,一个变量的值在被使用之前,这个变量的初始化过程需要被明确调用。一下子初始化所有的变量

sess = tf.Session()
init_op = tf.initialize_all_variables()

或者换成init_op = tf.global_variables_initializer()也可

sess.run(init_op)

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

Python 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
python实现得到一个给定类的虚函数
Sep 28 Python
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
python编写简单爬虫资料汇总
Mar 22 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python通过队列来实现进程间通信的示例
Oct 14 Python
python构建深度神经网络(续)
Mar 10 #Python
python构建深度神经网络(DNN)
Mar 10 #Python
Python使用numpy实现BP神经网络
Mar 10 #Python
python实现日常记账本小程序
Mar 10 #Python
python实现简单神经网络算法
Mar 10 #Python
TensorFlow saver指定变量的存取
Mar 10 #Python
TensorFLow用Saver保存和恢复变量
Mar 10 #Python
You might like
PHP面向对象分析设计的经验原则
2008/09/20 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
10 个经典PHP函数
2013/10/17 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
Python 解析xml文件的示例
2020/09/29 Python
Python如何急速下载第三方库详解
2020/11/02 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
接口中的方法可以是abstract的吗
2015/07/23 面试题
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
元旦晚会活动总结
2014/07/09 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
Python实现抖音热搜定时爬取功能
2022/03/16 Python
python blinker 信号库
2022/05/04 Python