写在前面

本篇文章主要讲解TensorFlow的一些基础概念以及基础操作,作为初学者,文章内容难免有错误,各位看官发现错误,还请不吝指正!!!🤝

  1. 基础数据类型以及了解张量的含义

  2. 张量的创建

  3. 张量的基础操作


写在中间

一、 基础数据类型

大家在学习过程之中会经常遇到Tensor这个名词,究竟是什么意思呢?不急,看完这两篇文章之后,你就会有有较为清晰的了解。

https://zhuanlan.zhihu.com/p/48982978

https://zhuanlan.zhihu.com/p/140260245

简单概括:0维的张量就是标量,1维的张量就是向量,2维的张量就是矩阵,大于等于3维的张量没有名称,统一叫做张量。


Python五大常用数据类型: 整型( int )、浮点型( float )、双精度浮点型( double )、布尔型( bool )、字符串型( string )

列表( list ): Python内置数据类型,形式可以是 [ 1, 2.3, “Hello”, True],成员的类型可以不同

数组 ( array ): Python内置数据类型中是没有此数据类型的,但是Numpy库中提供了此数据类型。不同于列表和元组,数据成员必须是相同数据类型属性,但对GPU计算没有支持,无自动求导等功能。

张量( tensor)

标量( scalar ):1、2、3.4(零维)

向量( vector ):[1.2]、[1.1,2.2,3.3] (一维)

矩阵( matrix ):[ [1.1, 2.2],[3.3, 4.4] ] (二维)


二、 张量创建(Tensor)

( 1.1 )法一:constant创建

tensorflow.constant(value, shape=维度, dtype=数据类型, verify_shape=False)

  • value :数字、字符串、布尔值、列表

  • shape :形状,指维数以及每一维的大小。当第一个参数value是数字时,张量的所有元素都会用该数字填充,shape=[2, 3]。当第一个参数value是一个列表时,注意列表的长度必须小于等于参数shape的大小(即各维大小的乘积)

  • dtype :指定数据类型,如dtype=tf.float64

  • verify_shape :如果修改为True的话,表示检查value的形状与shape是否相符,如果不符会报错。

( 1.2 )实践操作

import tensorflow as tf

# 定义一个3行3列的张量,每个元素都为1
tensor = tf.constant(1, shape=[3, 3])
print(tensor)

# 定义一个单值张量,值为1.0,默认dtype为float32
tensor = tf.constant(1.)
print(tensor)

# 定义一个值为2.0,dtype为float64的张量
tensor = tf.constant(2., dtype=tf.double)
print(tensor)

# 定义一个包含两个元素的布尔型张量
tensor = tf.constant([True, False])
print(tensor)

# 定义一个字符串类型的张量
tensor = tf.constant("Hello,World!")
print(tensor)

( 1.3 )运行结果

tf.Tensor(
[[1 1 1]
 [1 1 1]
 [1 1 1]], shape=(3, 3), dtype=int32)
tf.Tensor(1.0, shape=(), dtype=float32)
tf.Tensor(2.0, shape=(), dtype=float64)
tf.Tensor([ True False], shape=(2,), dtype=bool)
tf.Tensor(b'Hello,World!', shape=(), dtype=string)

( 2.1 )法二:tf.zeros()和tf.ones()创建

tf.zeros(shape, dtype=tf.float32, name=None):创建全0张量,参数和tf.constant()相似,其中dtype默认为tf.float32name为可选参数。

tf.ones(shape, dtype=tf.float32, name=None):创建全1张量,参数和tf.constant()相似,其中dtype默认为tf.float32name为可选参数。

( 2.2 )实践操作

import tensorflow as tf
# 创建一个3行3列的全0张量,默认dtype为float32
tensor = tf.zeros([3, 3])
print(tensor)

# 创建一个2行2列的全1张量,dtype设置为int32
tensor = tf.ones([2, 2], dtype=tf.int32)
print(tensor)

( 2.3 )运行结果

tf.Tensor(
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]], shape=(3, 3), dtype=float32)
tf.Tensor(
[[1 1]
 [1 1]], shape=(2, 2), dtype=int32)

( 3.1 )法三:tf.Variable()创建

tf.Variable()函数可以创建一个可修改的张量,即变量。变量在模型训练过程中会动态变化,需要进行优化操作。

tf.Variable(initial_value=None, trainable=True, dtype=None, name=None, constraint=None)

  • initial_value:张量的初始值,可以是任何类型,不同于tf.constant()函数,变量在初始化后是可修改的。
  • trainable:表示变量是否可被训练,即是否可被梯度下降等优化算法调整。
  • dtype:变量的数据类型,默认为None
  • name:变量的名称,是可选的。
  • constraint:变量的约束条件,是可选的。

( 3.2 )实践操作

import tensorflow as tf
# 定义一个可修改的张量
tensor = tf.Variable([1, 2, 3])
print(tensor)
# 初始化后可以修改张量的值
tensor.assign([4, 5, 6])
print(tensor)
# 也可以通过assign_add()和assign_sub()方法修改张量的值
tensor.assign_add([1, 1, 1])
print(tensor)
tensor.assign_sub([1, 1, 1])
print(tensor)

( 3.3 )运行结果

<tf.Variable 'Variable:0' shape=(3,) dtype=int32, numpy=array([1, 2, 3], dtype=int32)>
<tf.Variable 'Variable:0' shape=(3,) dtype=int32, numpy=array([4, 5, 6], dtype=int32)>
<tf.Variable 'Variable:0' shape=(3,) dtype=int32, numpy=array([5, 6, 7], dtype=int32)>
<tf.Variable 'Variable:0' shape=(3,) dtype=int32, numpy=array([4, 5, 6], dtype=int32)>

( 4.1 )法四:随机创建

tf.random.uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None):创建一个随机的均匀分布的张量,参数如下:

  • shape:张量的形状,可以是一个一维的列表,如[2, 3]

  • minval:均匀分布的最小值,默认为0。

  • maxval:均匀分布的最大值,默认为1。

  • dtype:张量的数据类型,默认为tf.float32

  • seed:生成随机数的种子。

  • name:张量的名称,是可选的。

tf.random.normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)

  • shape:张量的形状,可以是一个一维的列表,如[2, 3]

  • mean:正态分布的均值,默认为0。

  • stddev:正态分布的标准差,默认为1。

  • dtype:张量的数据类型,默认为tf.float32

  • seed:生成随机数的种子。

  • name:张量的名称,是可选的。

( 4.2 )实践操作

import tensorflow as tf
# 创建一个随机的均匀分布的张量
tensor_uniform = tf.random.uniform(shape=[2, 3], minval=0, maxval=10)
# 创建一个随机的正态分布的张量
tensor_normal = tf.random.normal(shape=[2, 3], mean=0, stddev=1)
print(tensor_uniform)
print(tensor_normal)

( 4.3 )运行结果:

tf.Tensor(
[[8.5141573  5.6180024  9.240239  ]
 [9.835485   1.1550446  3.1731434 ]], shape=(2, 3), dtype=float32)
tf.Tensor(
[[ 1.3331307   0.61228025  1.1319485 ]
 [ 1.2318208   0.5006925  -0.9704096 ]], shape=(2, 3), dtype=float32)

可以看到,随机创建的张量形状由参数shape指定,而张量的值则是在均匀分布或正态分布中随机抽样得到的。


三、 张量基础操作

( 1 )简单介绍

张量名.ndim :查看维度,返回int类型

tf.rank(张量名) :查看维度,返回tensor类型

张量名.shape :查看tensor的形状

tf.is_tensor(变量) :判断变量是否是tensor类型,返回布尔类型

isinstance(变量, 数据类型) :判断变量是否属于该数据类型,返回布尔类型

变量.dtype :查看变量数据类型,返回数据类型

( 2 )实践操作

import tensorflow as tf  # 导入 tensorflow 模块

tensor = tf.range(4)  # 定义一个包含 0~3 共 4 个元素的一维张量(tensor)

print(tensor)  # 打印张量的值

print(tensor.ndim)  # 打印张量的维度数量(这个张量是一维的,因此打印的结果为 1)

print(tf.rank(tensor))  # 打印张量的秩(这个张量是一维的,秩为 1)

print(tensor.shape)  # 打印张量的形状(这个张量是一维的,形状为 (4,)

print(tf.is_tensor(tensor))  # 判断张量是否为 tensorflow 张量类型(返回 True)

print(isinstance(tensor, tf.Tensor))  # 判断张量是否为 tensorflow 张量类型(返回 True)

print(tensor.dtype)  # 打印张量的数据类型(这个张量的数据类型为默认的 int32)

运行结果:

tf.Tensor([0 1 2 3], shape=(4,), dtype=int32)
1
tf.Tensor(1, shape=(), dtype=int32)
(4,)
True
True
<dtype: 'int32'>

写在最后

05-20 16:23