您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > tensorflow入门教程
TENSORFLOW入门教程主流深度学习框架上表所示为各个开源框架在GitHub上的数据统计人工神经网络•卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。它包括卷积层(convolutionallayer)和池化层(poolinglayer)。•循环神经网络(RecurrentneuralNetwork)神经网络是一种节点定向连接成环的人工神经网络。这种网络的内部状态可以展示动态时序行为。RNN可以利用它内部的记忆来处理任意时序的输入序列,这让它可以更容易处理语音识别等问题。•递归神经网络(recursiveneuralnetwork),是神经网络在结构上的展开。结构递归神经网络利用相似的神经网络结构递归构造更为复杂的深度网络.常用于自然语言处理。TENSORFLOW介绍•TensorFlow™是一个使用数据流图进行数值计算的开源软件库。图中的节点代表数学运算,而图中的边则代表在这些节点之间传递的多维数组(张量)。这种灵活的架构可让您使用一个API将计算工作部署到桌面设备、服务器或者移动设备中的一个或多个CPU或GPU。•TensorFlow最初是由Google机器智能研究部门的GoogleBrain团队中的研究人员和工程师开发的,用于进行机器学习和深度神经网络研究,但它是一个非常基础的系统,因此也可以应用于众多其他领域。•TensorFlow可以灵活适应不同的使用规模,既支持探索性研究,也支持大规模生产用途。TensorFlow目前最新的版本是1.4TENSORFLOW安装及编程基础•我们推荐使用GPU运行tensorflow,因为GPU比CPU更适合张量的运算,效率成倍数提升。但是并不是每台设备都配备GPU,没有GPU的设备可以使用CPU版本。•Tensorflow支持多种语言的,推荐使用python做为API,因为它代码简洁,容易上手,最重要的是能混合其他DL库一块使用。•Tensorflow需要python3.5以上的运行环境,如果没有请下载安装。安装有python环境的执行pipinstalltensorflow或者pipinstalltensorflow-gpu即可进行安装,安装过程会自动下载安装所需要的依赖库。•有线性代数与矩阵,概率论,多重积分,级数变换,信息论等工科基础。•了解前馈神经网络(BP),卷积神经网络(CNN),循环神经网络(RNN)算法。TENSOR(张量)•Tensor(张量):张量是tensorflow核心的基本数据单元。张量是一个多维数组。•rank:张量的秩,就是张量的维数。shape:描述张量的形状。计算方法:去掉中括号,逗号+1就是数组的值。数组的的长度是rank。举例:•[1.,2.,3.]#arank1tensor;avectorwithshape[3]•[[1.,2.,3.],[4.,5.,6.]]#arank2tensor;amatrixwithshape[2,3]•[[[1.,2.,3.]],[[7.,8.,9.]]]#arank3tensorwithshape[2,1,3]THECOMPUTATIONALGRAPH(计算图)•计算图是由一系列的tensorflow的操作组成,并且这些操作编配成计算图的节点。站在计算图的角度,你可以认为tensorflow程序是有相对独立的两部分组成。构建计算图、运行计算图。•node1=tf.constant(3.0,dtype=tf.float32)•node2=tf.constant(4.0)•print(node1,node2)•打印结果:•Tensor(Const:0,shape=(),dtype=float32)•Tensor(Const_1:0,shape=(),dtype=float32)SESSION(会话)•Session:囊括tensorflow运行时候的状态,运行控制。•sess=tf.Session()•print(sess.run([node1,node2]))•结果:[3.0,4.0]•我们当然可以写出更复杂的计算图。•from__future__importprint_function•node3=tf.add(node1,node2)•print(node3:,node3)•print(sess.run(node3):,sess.run(node3))•打印出两行:•node3:Tensor(Add:0,shape=(),dtype=float32)•sess.run(node3):7.0PLACEHOLDERS(占位符)•placeholders:在计算图中,能够接受额外输入,通常情况下,提供的值晚于定义。•a=tf.placeholder(tf.float32)•b=tf.placeholder(tf.float32)•adder_node=a+b以上三行代码,很像一个函数,或者是lambda表达式。我们可以通过feed_dict参数•去填充一些具体的值。•print(sess.run(adder_node,{a:3,b:4.5}))•print(sess.run(adder_node,{a:[1,3],b:[2,4]}))•输出结果:•7.5[3.7.]VARIABLES(变量)•Variables:是在模型训练中,允许修改的量。相同的输入,通过修改变量得到不同输出值。在线性模型中用来描述权重和偏移量。•W=tf.Variable([.3],dtype=tf.float32)•b=tf.Variable([-.3],dtype=tf.float32)•x=tf.placeholder(tf.float32)•linear_model=W*x+b•变量必须显示申明,使用:•init=tf.global_variables_initializer()//初始化全局变量•sess.run(init)•print(sess.run(linear_model,{x:[1,2,3,4]}))TF.TRAINtf.train是用于训练模型的低级API。•最简单的优化方式,梯度下降。就是求损失函数的导数,每一步都会逼近损失函数最小值。当然tensorflow提供tf.gradients自动求导,自动优化损失函数。•optimizer=tf.train.GradientDescentOptimizer(0.01)•train=optimizer.minimize(loss)•sess.run(init)#resetvaluestoincorrectdefaults.•foriinrange(1000):•sess.run(train,{x:[1,2,3,4],y:[0,-1,-2,-3]})•print(sess.run([W,b]))•[array([-0.9999969],dtype=float32),array([0.99999082],dtype=float32)]TF.ESTIMATOR•tf.estimator是一个高级API,定义了许多通用型模型。包括运行训练循环、运行评估循环、管理数据集等功能。•feature_columns=[tf.feature_column.numeric_column(x,shape=[1])]•estimator=tf.estimator.LinearRegressor(feature_columns=feature_columns)•x_train=np.array([1.,2.,3.,4.])•y_train=np.array([0.,-1.,-2.,-3.])•x_eval=np.array([2.,5.,8.,1.])•y_eval=np.array([-1.01,-4.1,-7,0.])•input_fn=tf.estimator.inputs.numpy_input_fn(•{x:x_train},y_train,batch_size=4,num_epochs=None,shuffle=True)•train_input_fn=tf.estimator.inputs.numpy_input_fn(•{x:x_train},y_train,batch_size=4,num_epochs=1000,shuffle=False)•eval_input_fn=tf.estimator.inputs.numpy_input_fn(•{x:x_eval},y_eval,batch_size=4,num_epochs=1000,shuffle=False)•estimator.train(input_fn=input_fn,steps=1000)•train_metrics=estimator.evaluate(input_fn=train_input_fn)•eval_metrics=estimator.evaluate(input_fn=eval_input_fn)•print(trainmetrics:%r%train_metrics)•print(evalmetrics:%r%eval_metrics)MNIST实例分析•MNIST:是一个入门级的计算机视觉数据集。•它包含各种手写数字图片:••上面这4张图片的标签是5,0,4,1。•实例目的:使用tensorflow训练一个手写体图像识别模型,识别一张手写数字照片。•实例数据:28像素X28像素预处理之后的照片。训练集:55000行;预测集:10000行;•交叉验证集:5000行mnist.train.images是一个形状为[55000,784]的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介于0和1之间。one-hotvectors数字n将表示成一个只有在第n维度(从0开始)数字为1的10维向量。比如,标签0将表示成([1,0,0,0,0,0,0,0,0,0,0])。mnist.train.labels是一个形状[55000,10]的张量数据下载地址•MNIST_data百度网盘地址:•input_data.py百度网盘地址:•input_data.py用于下载训练和测试的MNIST数据集的python源码。权重初始化WEIGHTINITIALIZATION•在神经网络中会创建大量的权重和偏置值。如何初始化这些variables。•为避免零梯度,我们使用tf.truncated_normal(shape,mean,stddev)生成正态分布的值。shape表示生成张量的维度,mean是均值,stddev是标准差。这样聚能保证随机初始化的权重,偏置值不同。•正态分布:统计样本常见的一种数值分布。自然情况下,人的身高是属于正态分布的。•defweight_variable(shape):•initial=tf.truncated_normal(shape,stddev=0.1)•returntf.Variable(initial)•defbias_variable(shape):•initial=tf.constant(0.1,shape=shape)•returntf.Variable(initial)卷积和池化CONVOLUTIONANDPOOLING•tensorflow提供非常灵活的卷积,池化操作。•TensorFlowalsogivesusalotofflexibilityinconvolutionandpoolingoperations.•卷积使用1步长(stridesize),0边距(paddingsize)的模板,保证输出和输入是同一个大小。•池化
本文标题:tensorflow入门教程
链接地址:https://www.777doc.com/doc-7637052 .html