TensorFlow框架语法-常量与变量

222 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


引言

TesorFlowTesorFlow = TensorTensor(张量,多维数组) + FlowFlow(流,张量之间通过计算而转换的过程)

从功能角度,张量可以简单理解为多维数组,张量并没有真正保存数字,它保存的是计算过程。

  1. 零阶张量表示标量(scalar),也就是一个数
  2. 一阶张量表示向量(vector),也就是一维数组
  3. n 阶张量可以理解成一个n维数组

TensorFlowTensorFlow 是一个通过计算图的形式表述计算的编程系统。

  1. 每一个计算都是计算图上的节点
  2. 节点之间的边描述了计算之间的关系 计算图是一个有向图,由以下内容构成
  3. 一组节点,每个节点都代表一个操作,是一种运算
  4. 一组有向边,每条边代表节点之间的关系(数据传递和控制依赖)
  • 首先简单回顾一下 TensorflowTensorflow 的关键点,在 TensorFlowTensorFlow 中,所有的数据都通过张量的形式来表示 从功能的角度,张量可以简单理解为多维数组。 TensorFlowTensorFlow 中最基本的单位是常量(Constant)变量(Variable),和占位符(Placeholder)

  • 简而言之常量与变量的区别:常量在定义后,常量的值和维度不可变。变量被定义后,变量的值可变,但是维度不可变。在神经网络中,变量一般可用来保存训练参数,作为储存权重和其他信息的矩阵,而常量可作为储存超参数或其他结构信息的变量。

下面将主要介绍TensorFlowTensorFlow中的常量与变量的创建。

1. 常量:

TensorFlowTensorFlow框架中,常常使用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))