持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
注意:本文使用tensorflow1.x版本进行演示
使用本地Jupyter Notebook搭载TensorFlow相关库进行操作
1. 变量
TensorFlow变量是表示程序处理的共享持久状态的最佳方法,变量通过tf.VariableOP类进行操作。非常适合保存模型参数,这也决定了变量的特点如下:
- 存储持久化
- 可修改值
- 可指定被训练
1.1 创建变量
tf.Variable(initial_value=None, trainable=True, collections=None, name=None)
- initial_value:初始化的值
- trainable:是否可以被训练
- collections:新变量将添加到列出的图的集合中colletions,如果trainable是True变量也被添加到图形集合GraphKeys.GLOBAL_VARIABLES
- 注意:变量需要显式初始化,才能运行值。
- 需要在开启会话前,单独使用
tf.global_variables_initializer()初始化操作对变量进行初始化。
- 需要在开启会话前,单独使用
创建变量代码演示如下所示:
- 创建一个函数,用来演示创建变量
- 创建三个变量
- 初始化变量操作
- 开启会话
- 使用sess.run()来运行operation
def variable_demo():
"""
创建变量的演示
"""
# 创建变量
v1 = tf.Variable(initial_value=20)
v2 = tf.Variable(initial_value=10)
v_add = tf.add(v1, v2)
print("v1:\n", v1)
print("v2:\n", v2)
print("v_add:\n", v_add)
# 初始化变量
init = tf.global_variables_initializer()
# 开启会话
with tf.Session() as sess:
# 运行初始化
sess.run(init)
value_1, value_2, value_add = sess.run([v1, v2, v_add])
print("value_1:\n", value_1)
print("value_2:\n", value_2)
print("value_add:\n", value_add)
return None
运行结果如下图所示:
- 如果没有初始化变量操作,只是开启会话,会出现报错
- 因此,在初始化变量操作以后,会显示出变量的值
- 创建变量时的initial_value并不是初始化,注意不要被混淆
1.2 修改变量命名空间
使用tf.variable_scope()可以修改命名空间,就会在指令名称之前出现你想要的命名。
- 会在OP的名字前面增加命名空间的指定名字
- ()中添加你想要的命名
- 在创建变量时,开启变量命名空间
- 对于不同的变量,可以分别开启不同的命名空间
def variable_demo():
"""
创建变量的演示
"""
# 创建变量
with tf.variable_scope("scope111"):
v1 = tf.Variable(initial_value=20)
v2 = tf.Variable(initial_value=10)
with tf.variable_scope("scope222"):
v_add = tf.add(v1, v2)
print("v1:\n", v1)
print("v2:\n", v2)
print("v_add:\n", v_add)
# 初始化变量
init = tf.global_variables_initializer()
# 开启会话
with tf.Session() as sess:
# 运行初始化
sess.run(init)
value_1, value_2, value_add = sess.run([v1, v2, v_add])
print("value_1:\n", value_1)
print("value_2:\n", value_2)
print("value_add:\n", value_add)
return None
variable_demo()
运行结果如下图所示:
- 这样做方便代码模块化,使每个部分之间比较清晰。
- 在写成事件文件,经过可视化,也会使得图的结构更清晰。