本篇文章主要讲解TensorFlow的一些基础概念以及基础操作,作为初学者,文章内容难免有错误,各位看官发现错误,还请不吝指正!!!
基础数据类型以及了解张量的含义
张量的创建
张量的基础操作
大家在学习过程之中会经常遇到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] ] (二维)
( 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.float32
,name
为可选参数。
tf.ones(shape, dtype=tf.float32, name=None)
:创建全1张量,参数和tf.constant()
相似,其中dtype
默认为tf.float32
,name
为可选参数。
( 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 )运行结果
( 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
点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!