Tensorflow常量变量与张量
我们今天要讲的是Tensorflow2.0的一些基本操作。在了解Tensorflow之前,我们需要先来了解一下常量变量与张量
常量变量
推荐阅读博客 https://sowhat.blog.csdn.net/article/details/79188449 下面摘抄一些核心的概念和例子
常量就是constant,被声明之后无法改变。变量是variable,声明之后仍能改变。张量则是一个比较大的概念。
几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶向量
张量是现代机器学习的基础。它的核心是一个数据容器,多数情况下,它包含数字,有时候它也包含字符串,但这种情况比较少。因此把它想象成一个数字的水桶。
阶 | 数学实例 | 代码实例 |
---|---|---|
0 | 纯量(只有大小) | s =123 |
1 | 向量(有大小和方向) | v = [1.1,2.2,3.3] |
2 | 矩阵(数据表) | m = [[1,2,3],[4,5,6],[7,8,9]] |
3 | 3阶张量(数据立体) | t = [[[2],[4],[6]],[[8],[10],[12]],[[14], [16],[18]]] |
n | n阶 | n维的一个空间 |
现在我们来熟悉一下在Tensorflow中怎么声明常量变量与张量
定义常量
1 | tensor_20 = tf.constant([[23,4],[32,51]]) |
打印结果如下:
1 | <tf.Tensor: shape=(2, 2), dtype=int32, numpy= |
如果要查看tensor的形状,我们可以这样写:
1 | tensor_20.shape |
打印: TensorShape([2, 2])
数值与Tensorflow的常量之间的相互转换
利用 tensor_20.numpy()
可以将刚刚定义的tf常量用一个普通的二维数组的形式呈现出来。我们也可以通过这个方法直接来得到常量的值
1 | array([[23, 4], |
要将普通的numpy数组转换成tf的常量,也非常简单,利用 tf.constant()
即可。这种转换是tensorflow2.0的最新特性,非常方便
1 | numpy_tensor = np.array([[23,4],[32,51]]) |
打印结果如下:
1 | <tf.Tensor: shape=(2, 2), dtype=int32, numpy= |
变量
声明一个变量和声明一个常量只需要将 tf.constant()
改成 tf.Variable()
即可,但是要注意这个Variable 只能是大写V。
1 | tf2_variable = tf.Variable([[1.,2.,3.],[4.,5.,6.]]) |
打印如下:
1 | <tf.Variable 'Variable:0' shape=(2, 3) dtype=float32, numpy= |
那么变量也是可以通过 .numpy
来转换成numpy数组的
1 | tf2_variable.numpy() |
修改变量的值
我们可以通过定位到变量中某一个位置并通过 .assign()
的方法将变量中的某个值修改。
1 | tf2_variable[0,2].assign(100) |
张量运算
tensorflow定义的常量和变量都属于张量。现在我们对我们定义的张量进行一些运算操作
首先我们来定义一个常量张量,这个常量张量并不会被修改但是仍然可以参与运算
1 | tensor = tf.constant([[1,2],[3,4]]) |
addition
利用 tensor+2
可以让tensor中所有的元素都加上2
1 | tensor+2 |
Multiplication
利用 tensor*5
可以让tensor中所有的元素都乘上5
1 | tensor*5 |
Using Numpy functions on Tensorflow tensors
我们也可以用numpy的一些数学方法来计算Tensorflow中的张量,但是得到的数据类型不是tensor而是numpy array
1 | np.square(tensor) |
1 | np.sqrt(tensor) |
两个张量之间的点乘
使用 dot
方法,就可以计算两个张良之间的点乘
1 | print(tensor) |
字符串
.constant()
方法并不仅仅能定义一个常量张量。还能创建一个字符串常量.一般来说我们不会经常使用到 tensorflow来创建字符串,除了用它来做NLP之外。
1 | tf_string = tf.constant("TensorFlow") |
简单的字符串操作
我们可以用 strings.length()
方法来求出字符串的长度。其中 numpy=10 的意思就是说这个字符串的长度为10
1 | tf.strings.length(tf_string) |
我们还可以利用strings.unicode_decode()
对字符串进行重新编码。比如将其设置为 UTF8
编码格式的话,打印结果如下: 我们看到字符串变成了一个长为10的数字数组,因为UTF-8格式会将字符串的每一个字母编码成一个数字。
1 | tf.strings.unicode_decode(tf_string, "UTF8") |
字符串数组
下面这个写法是如何用 tensorflow来实现一个字符串数组的。这里创建的是一个一维的字符串数组
1 | tf_string_array = tf.constant(["TensorFlow", "Deep Learning", "AI"]) |
通过遍历我们可以打印出字符串数组中的每一个元素
1 | for string in tf_string_array: |