您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > TensorFlow深度学习框架
TensorFlowGlimpse初了解By:程枫justry2014@outlook.com深度学习工具对比库名称开发语言平台特性CaffeCaffe-Caffe2C++/python/MatlabLinux/MacOS/Windows在CV领域应用最为广泛TheanopythonLinux/MacOS/Windows发布早,文档丰富适用于学术领域PyTorchTorch-PyTorchPython(Torch开发语言为Lua/C)Linux/MacOS轻量级、灵活TensorflowC++/PythonLinux/MacOS/WindowsAndroid/iOS功能齐全、适合企业级开发Keras一个用于快速构建深度学习原型的高级库,可以用Tensorflow和Theano的backend,优点是高度的模块化安装(Ubuntu16.0464bit)1、安装Anaconda(1)官网下载对应版本(2)在下载目录下执行:bashAnaconda3-4.4.0-Linux-x86_64.sh(3)安装Spyder,sudoaptinstallspyder2、安装TensorFlowCPU版本(1)方法一:pipinstalltensorflow(2)方法二:下载源码安装(可对配置进行修改)第一行代码envpython2.7importtensorflowastfmatrix1=tf.constant([[3.,3.]])matrix2=tf.constant([[2.],[2.]])product=tf.matmul(matrix1,matrix2)sess=tf.Session()result=sess.run(product)printresultsess.close()#关闭会话运行结果:[[12.]]基本概念TensorFlow的数据模型为tensor(张量),可简单理解为类型化的多维数组,0维张量是一个数字,也成为标量,1维张量称为“向量”,2维张量称为矩阵……但和Numpy中的数组不同是,一个张量中主要保留了三个属性:name,shape,type#env=python2.7importtensorflowastfa=tf.constant([1,2,3])b=tf.constant([2,3,5])result=tf.add(a,b,name=“add”)printresulttensor(“add:0,shape=(3,),dtype=int32)add:0表示result这个张量是计算节点“add”输出的第一个结果shape=(3,)表示张量是一个一维数组,这个数组的长度是3dtype=int32是数据类型,TensorFlow会对参与运算的所有张量进行类型的检查,当类型不匹配时会报错。运行结果基本概念TensorFlow的运行模型为session(会话),会话拥有和管理TensorFlow程序运行时的所有资源,当计算完成后,需要关闭会话来帮助系统回收资源,否则就可能出现资源泄露的问题,TensorFlow使用会话的方式主要有如下两种模式:#env=python2.7sess=tf.Session()#创建一个会话sess.run(result)#运行此会话Sess.close()#运行完毕关闭此会话array([3,5,8],dtype=int32)当使用第一种模式,程序因为异常而退出时,关闭会话的函数就可能不会执行从而导致资源泄露,因此,推荐使用第二种模式运行结果#env=python2.7withtf.Session()assess:sess.run(result)#通过python的上下文管理器来使用会话,当上下文退出时会话管理和资源释放也自动完成基本概念TensorFlow的计算模型为graph(图),一个TensorFlow图描述了计算的过程.为了进行计算,图必须在会话里被启动.会话将图的op(节点)分发到诸如CPU或GPU之类的设备上,同时提供执行op的方法.这些方法执行后,将产生的tensor返回.在Python语言中,返回的tensor是numpyndarray对象;在C/C++语言中,返回的tensor是tensorflow::Tensor实例.abaddTensorFlow的Tensor表明了它的数据结构,而Flow则直观地表现出张量之间通过计算相互转化的过程TensorFlow中的每一个计算都是图上的一个节点,而节点之间的边描述了计算之间的依赖关系,a,b为常量,不依赖任何计算,而add计算则依赖读取两个常量的取值。基本概念在实现上,TensorFlow将图形定义转换成分布式执行的操作。一般不需要显式指定使用CPU还是GPU,TensorFlow能自动检测。如果检测到GPU,TensorFlow会尽可能地利用找到的第一个GPU来执行操作。如果机器上有超过一个可用的GPU,除第一个外的其它GPU默认是不参与计算的。为了让TensorFlow使用这些GPU,你必须将op明确指派给它们执行.with...Device语句用来指派特定的CPU或GPU执行操作withtf.Session()assess:withtf.device(/gpu:1):matrix1=tf.constant([[3.,3.]])matrix2=tf.constant([[2.],[2.]])product=tf.matmu为了获取你的operations和Tensor被指派到哪个设备上运行,用log_device_placement新建一个session,并设置为True.Sess=tf.Session(config=tf.ConfigProto(log_device_placement=True))变量Variable当训练模型时,用变量来存储和更新参数。变量包含张量(Tensor)存放于内存的缓存区。建模时它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析是被加载。当创建一个变量时,你将一个张量作为初始值传入构造函数Variable()。TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值。在初始化时需要指定张量的shape,变量的shape通常是固定的,但TensorFlow提供了高级的机制来重新调整。weights=tf.Variable(tf.random_normal([2,3],stddev=2),name=weights)这里生成2×3的矩阵,元素的均值为0,标准差为2(可用mean指定均值,默认值为0)。随机数生成函数:tf.truncated_normal()正太分布,偏离平均值超过两个偏差,重新选择tf.random_uniform(最小值,最大值)平均分布(控制字符中可加入种子,seed=n)常数生成函数:全零数组tf.zeros([2,3],int32)全一数组tf.ones()全为给定的某数(例如9):tf.fill([2,3],9)产生给定值得常量tf.cinstant([1,2,3])变量Variable除了tf.Variable函数,TensorFlow还提供了tf.get_variable函数来创建或获取变量。它们的区别在于,对于tf.Variable函数,变量名称是个可选的参数,通过name=‘v’给出,但对于tf.get_variable函数,变量名称是必填的选项,它会首先根据变量名试图创建一个参数,如果遇到同名的参数就会报错。importtensorflowastfv=tf.Variable(tf.constant(1.0,shape=[1]),name='v')v1=tf.Variable(tf.constant(1.0,shape=[1]),name='v')print(v==v1)Falseprint(v.name)v:0print(v1.name)v_1:0n=tf.get_variable(‘n’,shape=[1],initializer=tf.constant_initializer(1.0))#初始化n1=tf.get_variable('n',shape=[1],initializer=tf.constant_initializer(1.0))Traceback(mostrecentcalllast):Filepyshell#9,line1,inmodule……如果需要通过tf.get_variable获取一个已经创建的变量。需要通过tf.variable_scope函数来生成一个上下文管理器,当tf.variable_scope函数使用参数reuse=True时(默认值为False),这个上下文管理器内所有tf.get_variable函数会直接获取已经创建的变量,如果变量不存在,就会报错。tf.variable_scope函数是可嵌套的,当不指定值时,reuse的值将会和外面一层保持一致。withtf.variable_scope(foo):v=tf.get_variable(v,[1],initializer=tf.constant_initializer(1.0))#withtf.variable_scope(foo):#v=tf.get_variable(“v”,[1])#报错withtf.variable_scope(foo,reuse=True):v1=tf.get_variable(v,[1])print(v==v1)#运行结果:Truewithtf.variable_scope(,reuse=True):v5=tf.get_variable(“foo/bar/v”,[1])#获取foo/bar中创建的变量print(v1.name)foo/v2:0在生成上下文管理器时,也会创建一个命名空间,在命名空间内创建的变量名称,都会带上这个命名空间名作为前缀。可以之间通过带命名空间的变量名来获取其他命名空间下的变量。变量·实例#创建一个op,其作用是使state增加1state=tf.Variable(0,name=counter)one=tf.constant(1)new_value=tf.add(state,one)update=tf.assign(state,new_value)init_op=tf.initialize_all_variables()withtf.Session()assess:sess.run(init_op)printsess.run(state)for_inrange(3):sess.run(update)printsess.run(state)代码中assign()操作是图所描绘的表达式的一部分,正如add()操作一样.。所以在调用run()执行表达式之前,它并不会真正执行赋值操作。通常会将一个统计模型中的参数表示为一组变量.例如,你可以将一个神经网络的权重作为某个变量存储在一个tensor中。在训练过程中,通过重复运行训练图,更新这个tensor。注:assign(ref,value,validate_shape=None,use_locking=None,name=None)函数功能Update'ref'byassigning'value'toit.变量Variable有时候会需要用另一个变量的初始化值给当前变量初始化。tf.initialize_all_variables()是并行地初始化所有变量。使用其它变量的值初始化一个新的变量时,可以直接把已初始化的值作为新变量的初始值,或者把它当做tensor计算得到一个值赋予新变量。weights=tf.Variable(tf.random_normal([784,200],stddev=0.35),name=weights)w2=tf.Variable(weights.initialized_value(),name=w2)w_
本文标题:TensorFlow深度学习框架
链接地址:https://www.777doc.com/doc-4638902 .html