大家好,今天来为大家解答variables是什么意思?用法、例句这个问题的一些问题点,包括常用集合:Variable, Summary, 自定义也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
tensorflow用集合colletion组织不同类别的对象。tf.GraphKeys中包含了所有默认集合的名称。
collection提供了一种“零存整取”的思路:在任意位置,任意层次都可以创造对象,存入相应collection中;创造完成后,统一从一个collection中取出一类变量,施加相应操作。
Variable被收集在名为tf.GraphKeys.VARIABLES的colletion中
Tensorflow使用Variable类表达、更新、存储模型参数。
Variable是在可变更的,具有保持性的内存句柄,存储着Tensor。必须使用Tensor进行初始化。
k=tf.Variable(tf.random_normal([]),name='k')\n1\n
创建的Variable被添加到默认的collection中。
在整个session运行之前,图中的全部Variable必须被初始化。
sess=tf.Session()\ninit=tf.initialize_all_variables()\nsess.run(init)\n1\n2\n3\n
在执行完初始化之后,Variable中的值生成完毕,不会再变化。
特别强调:Variable的值在sess.run(init)之后就确定了;Tensor的值要在sess.run(x)之后才确定。
和Tensor,Operation一样,Variable也是全局的。
可以通过tf.all_variables()查看所有tf.GraphKeys.VARIABLES中的对象:
#examplefory=k*x\nx=tf.constant(1.0,shape=[])#0Dtensor\nk=tf.Variable(tf.constant(0.5,shape=[]))\ny=tf.mul(x,k)\nv=tf.all_variables()\n1\n2\n3\n4\n5\n
也可以用通用方法直接访问collection:
v=tf.get_collection(tf.GraphKeys.VARIABLES)\n1\n各类Variable
另外,tensorflow还维护另外几个collection:
函数集合名意义tf.all_variables()VARIABLES存储和读取checkpoints时,使用其中所有变量tf.trainable_variables()TRAINABLE_VARIABLES训练时,更新其中所有变量tf.moving_average_variables()MOVING_AVERAGE_VARIABLESExponentialMovingAverage对象会生成此类变量tf.local_variables()LOCAL_VARIABLES在all_variables()之外,需要用tf.init_local_variables()初始化tf.model_variables()MODEL_VARIABLES
Summary被收集在名为tf.GraphKeys.SUMMARIES的colletion中
Summary是对网络中Tensor取值进行监测的一种Operation。这些操作在图中是“外围”操作,不影响数据流本身。
我们模仿常见的训练过程,创建一个最简单的用例。
#迭代的计数器\nglobal_step=tf.Variable(0,trainable=False)\n#迭代的+1操作\nincrement_op=tf.assign_add(global_step,tf.constant(1))\n#实例应用中,+1操作往往在`tf.train.Optimizer.apply_gradients`内部完成。\n#创建一个根据计数器衰减的Tensor\nlr=tf.train.exponential_decay(0.1,global_step,decay_steps=1,decay_rate=0.9,staircase=False)\n#把Tensor添加到观测中\ntf.scalar_summary('learning_rate',lr)\n#并获取所有监测的操作`sum_opts`\nsum_ops=tf.merge_all_summaries()\n#初始化sess\nsess=tf.Session()\ninit=tf.initialize_all_variables()\nsess.run(init)#在这里global_step被赋初值\n#指定监测结果输出目录\nsummary_writer=tf.train.SummaryWriter('/tmp/log/',sess.graph)\n#启动迭代\nforstepinrange(0,10):\ns_val=sess.run(sum_ops)#获取serialized监测结果:bytes类型的字符串\nsummary_writer.add_summary(s_val,global_step=step)#写入文件\nsess.run(increment_op)#计数器+1\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n
调用tf.scalar_summary系列函数时,就会向默认的collection中添加一个Operation。
再次回顾“零存整取”原则:创建网络的各个层次都可以添加监测;在添加完所有监测,初始化sess之前,统一用tf.merge_all_summaries获取。
SummaryWriter文件中存储的是序列化的结果,需要借助TensorBoard才能查看。
在命令行中运行tensorboard,传入存储SummaryWriter文件的目录:
tensorboard--logdir/tmp/log\n1\n
完成后会提示:
Youcannavigatetohttp://127.0.1.1:6006\n1\n
可以直接使用服务器本地浏览器访问这个地址(本机6006端口),或者使用远程浏览器访问服务器ip地址的6006端口。
除了默认的集合,我们也可以自己创造collection组织对象。网络损失就是一类适宜对象。
tensorflow中的Loss提供了许多创建损失Tensor的方式。
x1=tf.constant(1.0)\nl1=tf.nn.l2_loss(x1)\nx2=tf.constant([2.5,-0.3])\nl2=tf.nn.l2_loss(x2)\n1\n2\n3\n4\n5\n
创建损失不会自动添加到集合中,需要手工指定一个collection:
tf.add_to_collection("losses",l1)\ntf.add_to_collection("losses",l2)\n1\n2\n
创建完成后,可以统一获取所有损失,losses是个Tensor类型的list:
losses=tf.get_collection('losses')\n1\n
另一种常见操作把所有损失累加起来得到一个Tensor:
loss_total=tf.add_n(losses)\n1\n
执行操作可以得到损失取值:
sess=tf.Session()\ninit=tf.initialize_all_variables()\nsess.run(init)\nlosses_val=sess.run(losses)\nloss_total_val=sess.run(loss_total)\n1\n2\n3\n4\n5\n
实际上,如果使用TF-Slim包的losses系列函数创建损失,会自动添加到名为”losses”的collection中。
OK,本文到此结束,希望对大家有所帮助。