本文是基于tensorflow2.2.0版本,介绍了tf中变量、张量的概念,tf中梯度的计算方式和tensor相关的操作。
实战系列篇章中主要会分享,解决实际问题时的过程、遇到的问题或者使用的工具等等。如问题分解、bug排查、模型部署等等。相关代码实现开源在:https://github.com/wellinxu/nlp_store ,更多内容关注知乎专栏(或微信公众号):NLP杂货铺。
- 变量
- 张量
- 张量的创建
- 形状
- 索引
- 其他张量
- 非矩阵张量
- 稀疏张量
- 梯度计算
- GradientTape的参数与方法
- Gradient tapes
- 模型中的梯度
- operations
- 数组操作
- 检查操作
- 裁剪操作
- 流程控制操作
- 函数操作
- 数学操作
- 其他操作
- 参考
变量
TensorFlow2中可以使用tf.Variable来创建变量,变量与张量(tensor)很接近,拥有tensor的很多属性,以及操作(加减乘除等)。但张量是不可改变的,而变量是可以重新赋值的。变量的创建以及再赋值方法如下:
import tensorflow as tf
my_tensor = tf.constant([1.0, 2.0])
my_variable = tf.Variable(my_tensor) # 数值型
bool_variable = tf.Variable([False, False, False, True]) # bool型
complex_variable = tf.Variable([5 + 4j, 6 + 1j]) # 复数型
print(my_variable) #
print(bool_variable) #
print(complex_variable) #
# 再赋值
my_variable.assign([2.0, 3.0])
print(my_variable) #
张量
tensor(张量)是具有统一类型的多位数组,跟Python中数字、字符串类似,张量是不可改变的,只能创建一个新张量而不能更新张量的值(变量则可以更新)。
张量的创建
tensor可以直接从各种类型的数组(list或numpy)来创建,也能转成numpy数据。
# 创建
my_tensor1 = tf.constant([1.2, 4.5])
my_numpy = my_tensor1.numpy()
my_tensor2 = tf.convert_to_tensor(my_numpy)
print(my_tensor1) # tf.Tensor([1.2 4.5], shape=(2,), dtype=float32)
print(my_numpy) # [1.2 4.5]
print(my_tensor2) # tf.Tensor([1.2 4.5], shape=(2,), dtype=float32)
形状
tensor形状相关的有这么几个概念:
- 形状:shape,tesor中每个维度的长度
- 秩,rank,tensor维度的个数,标量的秩是0,向量是1,矩阵是2
- 维度,axis/dimension
- 大小,size,tensor中所有元素的个数