本文已参与「新人创作礼」活动,一起开启掘金创作之路。
引言
= (张量,多维数组) + (流,张量之间通过计算而转换的过程)
从功能角度,张量可以简单理解为多维数组,张量并没有真正保存数字,它保存的是计算过程。
- 零阶张量表示标量(scalar),也就是一个数
- 一阶张量表示向量(vector),也就是一维数组
- n 阶张量可以理解成一个n维数组
是一个通过计算图的形式表述计算的编程系统。
- 每一个计算都是计算图上的节点
- 节点之间的边描述了计算之间的关系 计算图是一个有向图,由以下内容构成
- 一组节点,每个节点都代表一个操作,是一种运算
- 一组有向边,每条边代表节点之间的关系(数据传递和控制依赖)
-
首先简单回顾一下 的关键点,在 中,所有的数据都通过张量的形式来表示 从功能的角度,张量可以简单理解为多维数组。 中最基本的单位是常量(Constant)、变量(Variable),和占位符(Placeholder)。
-
简而言之常量与变量的区别:常量在定义后,常量的值和维度不可变。变量被定义后,变量的值可变,但是维度不可变。在神经网络中,变量一般可用来保存训练参数,作为储存权重和其他信息的矩阵,而常量可作为储存超参数或其他结构信息的变量。
下面将主要介绍中的常量与变量的创建。
1. 常量:
在框架中,常常使用constant来定义一个常量,用Variable来定义变量。
在运行过程中值不会改变的单元,在TensorFlow中无须进行初始化操作创建语句:constant_name = tf.constant(value)
2. 变量:
在运行过程中值会改变的单元,在TensorFlow中须进行初始化操作创建语句:name_variable = tf.Variable(value, name)
具体使用语法如下所示:
个别变量初始化:init_op = name_variable.initializer()
所有变量初始化:init_op = tf.global_variables_initializer()
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior() # 解决方案:注释tf的引用,换为兼容模式。
node1 = tf.Variable(3.0, tf.float32, name='node1')
node2 = tf.Variable(4.0, tf.float32, name='node2')
result = tf.add(node1, node2)
sess = tf.Session()
# 变量初始化/所有变量初始化
init = tf.global_variables_initializer()
sess.run(init) # 必须执行一遍,才算初始化
print(sess.run(result))
3. 变量赋值:
与传统编程语言不同,TensorFlow中的变量定义后,一般无需人工赋值,系统会根据算法模型,训练优化过程中自动调整变量对应的数值。
后面再机器学习模型训练时会更能体会,比如权重Weight变量w,经过多次迭代,会自动调整。
特殊情况需要人工更新的,可用变量赋值语句:update_op = tf.assign(variable_to_be_updated, new_value)
# 变量赋值运算
value = tf.Variable(0, name = "value")
one = tf.constant(1)
new_value = tf.add(value, one)
update_value = tf.assign(value, new_value) # tf.assign把new_value的值赋给value
init1 = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init1)
for i in range(10):
sess.run(update_value)
print(sess.run(value))