python神经网络TensorFlow简介常用基本操作教程
作者:零尾 发布时间:2024-01-02 17:44:45
要将深度学习更快且更便捷地应用于新的问题中,选择一款深度学习工具是必不可少的步骤。
TensorFlow是谷歌于2015年11月9日正式开源的计算框架。
TensorFlow计算框架可以很好地支持深度学习的各种算法。
TensorFlow很好地兼容了学术研究和工业生产的不同需求。
一方面,TensorFlow的灵活性使得研究人员能够利用它快速实现新的模型设计;
另一方面,TensorFlow强大的分布式支持,对工业界在海量数据集上进行的模型训练也至关重要。
作为谷歌开源的深度学习框架,TensorFlow包含了谷歌过去10年间对于人工智能的探索和成功的商业应用。
除了TensorFlow,目前还有一些主流的深度学习开源工具可以使用。每个工具都有着各自的特点,可以根据自己的需求和喜好选择适合自己的深度学习工具。比如我一开始学习深度学习的时候接触的是Caffe,然后TensorFlow开源之后了解到了TensorFlow的一些特性,感觉还是更喜欢TensorFlow的风格,当然也考虑到会使用一种以上的深度学习工具也算见不错的事情。
其它一些主流的深度学习工具
Caffe: http://caffe.berkeleyvision.org/(Convolutional Architecture for Fast Feature Embedding) BVLC
MXNet: http://mxnet.readthedocs.io/en/latest/ (百度 DMLC(分布式机器学习社区) 简称”深盟”)
Torch: http://torch.ch/(Facebook Google DeepMind Twitter FAIR)
Theano: http://deeplearning.net/software/theano/(the LISA group at the University of Montreal(蒙特利尔))
TensorFlow: https://www.tensorflow.org/(Google)
CNTK(微软深度学习工具包 )
DeepLearning4J: http://deeplearning4j.org/
deepmat: https://github.com/kyunghyuncho/deepmat
Neon: http://neon.nervanasys.com/docs/latest/index.html
Eblearn: http://eblearn.sourceforge.net/
PyLearn: http://deeplearning.net/software/pylearn2/
chainer: https://github.com/pfnet/chainer
Bahrampour S, Ramakrishnan N, Schott L, et al. Comparative Study of Deep Learning Software Frameworks[J]. Computer Science, 2016.
框架对比
这篇文章对现在流行的五个开源深度学习框架 caffe、Neon、TensorFlow、Theano、Torch 做了很严谨比较。
作者开源了他们的比较 Benchmarks 代码:https://github.com/DL-Benchmarks/DL-Benchmarks
文章比较了:
可扩展性(extensibility),hardware utilization(硬件利用率),速度(speed)三个方面
评估测试都是部署在单机上,对于多线程 CPU、GPU(Nvidia Titan X)都进行测试
速度评估标准包括了梯度计算时间(gradient computation time)、前向传播时间(forward time)对于卷积神经网络,作者还
对这几个深度框架支持的不同的卷积算法以及相应的性能表现做了实验
通过实验得出了以下结论
Theano、Torch 是最具扩展性的深度学习框架
在 CPU 上的测试性能来看,Torch 最优,其次是 Theano
在 GPU 上的性能表现,对于大规模卷积以及全连接网络,还是 Torch 最优,其次是 Neon
Theano 在部署和训练 LSTM 网络中夺得拔筹caffe 是最容易测试评估性能的标准深度学习框架
最后,TensorFlow 与 Theano 有些相似,是比较灵活的框架,但是其性能表现,目前还比不上上面的几个框架
但是,毕竟这篇文章已经是过去时了,那时候TensorFlow 还只能用 cuDNN v.2 版本,而我现在已经装的是v5.1版本,而且TensorFlow 也已经发布了1.0版本。现在各工具性能如何,还需要新的评测才能说明问题。
变量:创建、初始化、保存和加载
当训练模型时,用变量来存储和更新参数。变量包含张量 (Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。
本文档描述以下两个TensorFlow类。点击以下链接可查看完整的API文档:
参考TensorFlow中文社区
- 添加神经层
输入参数有 inputs
, in_size
, out_size
, 和 activation_function
# 添加层
def add_layer(inputs, in_size, out_size, activation_function=None):
weights = tf.Variable(tf.random_normal([in_size, out_size]), name='weights')
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='biases')
y = tf.matmul(inputs, weights) + biases
if activation_function is None:
outputs = y
else:
outputs = activation_function(y)
return outputs
- loss
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
分类问题的loss 函数 cross_entropy 交叉熵
loss = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))
- 创建
当创建一个变量时,你将一个张量作为初始值传入构造函数Variable()。TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值。
注意,所有这些操作符都需要你指定张量的shape。那个形状自动成为变量的shape。变量的shape通常是固定的,但TensorFlow提供了高级的机制来重新调整其行列数。
# Create two variables.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
- 初始化
变量的初始化必须在模型的其它操作运行之前先明确地完成。最简单的方法就是添加一个给所有变量初始化的操作,并在使用模型之前首先运行那个操作。
使用tf.global_variables_initializer()
添加一个操作对变量做初始化。记得在完全构建好模型并加载之后再运行那个操作。
# 7.初始化变量
init = tf.global_variables_initializer()
# tf.global_variables_initializer()是并行地初始化所有变量
# 有时候会需要用另一个变量的初始化值给当前变量初始化,这就需要注意了
# 用其它变量的值初始化一个新的变量时,使用其它变量的initialized_value()属性。
# 你可以直接把已初始化的值作为新变量的初始值,或者把它当做tensor计算得到一个值赋予新变量。
# w1 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="w1")
# w2 = tf.Variable(w1.initialized_value(), name="w2")
# 8.启动图 (graph)
sess = tf.Session()
sess.run(init)
- 由另一个变量初始化
你有时候会需要用另一个变量的初始化值给当前变量初始化。由于tf.global_variables_initializer()
是并行地初始化所有变量,所以在有这种需求的情况下需要小心。用其它变量的值初始化一个新的变量时,使用其它变量的initialized_value()
属性。你可以直接把已初始化的值作为新变量的初始值,或者把它当做tensor计算得到一个值赋予新变量。
w1 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="w1")
w2 = tf.Variable(w1.initialized_value(), name="w2")
来源:https://blog.csdn.net/lwplwf/article/details/54929290
猜你喜欢
- 本文实例为大家分享了Bootstrap实现渐变顶部固定自适应导航栏的具体代码,供大家参考,具体内容如下具体代码如下所示:<!DOCTY
- 如下所示:for line in file.readlines():line=line.strip('\n')来源:http
- 最近做一个的GUI,因为调用了os模块里的system方法,使用pyinstaller打包的时候选择不输出系统命令弹框,程序无法运行,要求要
- 目录元组简单介绍声明元组元组与列表的区别特殊的元组元组的简写元组常见运算操作索引 [ ] 取值切片 [ : : ] 取值运算符 +运算符 *
- 环境:windows10_x64python3.9_x64pjsua-2.10vs2015pjsua编译参考这里: https://www.
- ASP通过XMLDom在服务器端操作XML文件的主要方法和实现对于小数据量,xml文件在检索更新上于ACCESS有很多优势。我曾经测试过不用
- Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解这是一道著名的 Python 面试题,考察的问题是,Pyth
- 今天要做一个量子隧穿的的演示动画,在CSDN上看了很多大佬的文章,然而忙了接近半天才做好这件事。把踩过的坑记一下,同时这段代码也是值得记录的
- 队列(queue)队列是先进先出(FIFO, First-In-First-Out)的线性表,在具体应用中通常用链表或者数组来实现,队列只允
- 项目需求:用户注册页面注册之后,系统会发送一封邮件到用户邮箱,用户点击链接以激活账户,其中链接中的用户信息需要加密处理一下其中激活自己邮箱的
- 由于新云CMS系统,网站底部“版权信息”字段在数据库中是“文本”类型,有250个字符的限制。想在这里给加网站统计代码,因为字数限制的原因,就
- em 和 strong 的区别,可以从三个层次上来谈。首先看 HTML 4.01 中的说明:EM: Indicates emphasis.S
- 这篇文章主要介绍了python批量启动多线程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 在应用系统中,尤其在联机事务处理系统中,对数据查询及处理速度已成为衡量应用系统成败的标准。而采用索引来加快数据处理速度也成为广大数据库用户所
- Pandas使用这些函数处理缺失值:isnull和notnull:检测是否是空值,可用于df和seriesdropna:丢弃、删除缺失值ax
- 1、Python中self的含义self,英文单词意思很明显,表示自己,本身。此处有几种潜在含义:1.这里的自己,指的是,实例Instanc
- 体系结构 Microsoft按照客户/服务器体系结构的分布进行操作。这种方法产生不必要的代价和复杂性。在Internet中,Oracle已经
- 0. 简介上一篇博客简单介绍了GMP模型,这一篇我们介绍一下Go调度器的初始化过程,也就是在main.main函数运行之前所做的事情。1.
- 在python中,提到如何计算多维数组和矩阵,那一定会想到numpy。numpy定义了矩阵和数组,为它们提供了相关的运算。size中文解释为
- 加载静态文件在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片等。因此在 DTL 中加载静