TensorFlow简介之 Variables
发布网友
发布时间:2024-10-07 03:32
我来回答
共1个回答
热心网友
时间:2024-10-30 07:18
在TensorFlow的文档中,关于TensorFlow Variables的描述是关于模型训练中参数的存储和更新机制的:“当你训练模型时,使用变量来保存和更新参数。它们是内存中的包含tensor的缓冲区。”这里的变量与常量tensor不同,常量一旦赋值后不可更改。在TensorFlow中,变量必须先被初始化,这是它们与常量的关键区别。
TensorFlow中的tensor主要分为两种:常量tensor和变量。常量tensor是不可变的,而变量则是动态存储,用于模型训练过程中参数的更新。例如:
Output
懒加载特性在TensorFlow中体现为,当执行sess.run()时,只有真正需要计算的部分才会执行,类似于Spark的延迟计算。比如,new_state比state大1的原因在于,第一次执行update时,依赖state和new_state的值,而new_state依赖于state的值和常量1。在执行过程中,会根据依赖关系逐步计算。
关于定义变量的方式,TensorFlow提供了两种策略。一方面,大型模型可能有数百个变量,这时,tf.variable_scope通过简单的命名空间管理避免名字冲突,而tf.get_variable则是从指定的命名空间内创建或访问变量。
变量命名的重要性在于,当进行迁移学习时,需要恢复之前的网络结构,通过变量名称可以定位到之前的参数。建议每次使用新的名字定义变量,以便于识别和重用。
1. tf.Variable() 方式命名规则是通过名字后追加下划线和数字,如Weights_3:0,表示第3个具有特定名称的变量,且在设备0上。名字的规则清晰易懂。
2. 而tf.get_variable() 通过variable_scope来提供命名空间,像C++的命名空间一样,为变量添加前缀,如foo/bar/weight_3:0,并控制变量的重用。
在tf.get_variable中,如果reuse设置为false,会创建并返回新的变量;如果设置为true,则会在已存在的变量中查找,找不到则会抛出异常。