1 TesorFlow的数据结构
list :[1,1.2,'Hello',(1,2)] ,这个list里面什么都可以存储,但是如果存储一个图片[64,32,32,3]里面全是数字的话,大小会很大,所以引入np.array
np.array :可以很方便的做一些同类型的数据的运算,比如加、减、乘、除、转置。但是有一个致命的弱点,就是np是在深度学习之前就设计好的库函数,所以他没有GPU的支持很慢,也没有求导
tf.Tensor :
scalar 是一个标量,dim=0,然后vector是一个一维数组dim=1
TF支持的计算类型:
▪ int, float, double
▪ bool
▪ string
1.1 常见数据类型的创建
#创建一个常量
tf.constant(1)
#创建一个浮点数常量,这里默认是float32类型
tf.constant(1.)
#创建一个double型常量
tf.constant(2.,dtype=tf.double)
#创建一个bool类型的常量
tf.constant([True,False])
#创建一个string类型的常量
tf.constant('Hello World')
1.2 tensorflow变成numpy
.numpy()函数
c=tf.range(5)
c.numpy()
#查看c的维度
c.ndim
1.3 rank函数
这个也是返回维数的比如说
其中tf.ones([3,4,2])是弄一个三维的数组
1.4 检验函数是不是tensor类型
tf.is_tensor(t)
1.5 numpy转化成tensor
aa=tf.conver_to_tensor(a)
a=np.arange(5)
aa=tf.conver_to_tensor(a)
如果转化的时候想改变类型的话
bb=tf.convert_to_tensor(a,dtype=np.int64)
1.6 tensor中数据的相互转化
API:
tf.cast(aa,tf.float32)就是把aa里面的数变成float32
tf.cast(bb,tf.float32)
tf.cast(bb,dtype=tf.double)
tf.cast(bb,dtype=tf.int32)
我们后面比较常见的就是整形和bool型之间的转化
b=tf.constant([0,1])
tf.cast(b,dtype=tf.bool)
#输出:<tf.Tensor: shape=(2,), dtype=bool, numpy=array([False, True])>
tf.cast(b,dtype=tf.int32)
1.7 Variable 类型
这个是专门为神经网络设计的一个类型,比如收y=w*x+b这个函数,我们在求梯度下降的时候会对w进行求导,所以我们可以将w设置成Variable类型,这样它进行梯度关系的一个跟踪,如果记录成Variable 就会自动的进行一些梯度的记录
2 创建tensor
其中方法有很多:
▪ from numpy, list
▪ zeros, ones
▪ fill
▪ random
▪ constant
2.1 from numpy,list
API:
conver_to_tensor()
tf.convert_to_tensor(np.ones([2,3]))
#这里创建的默认是float64类型的
tf.convert_to_tensor(np.zeros([2,3]))
#这里创建的默认是float64类型的
2.2 zeros, ones
tf.zeros()这个里面是维度
tf.ones()这个里面也是维度
注意这个括号里面的是维度,不如tf.zeros([2,2])这是创建了一个两行两列的0
tf.zeros([])
#这里就是一个标量0.
tf.zeros([2,3,4])
#这是一个三维的
2.3 tf.zeros.like(),tf.ones.like()
比如说这个tf.zeros.like(a),就是创建了一个和a形状相同的但是全0的矩阵,等价于tf.zeros.like(a.shape)
这个tf.zeros.like(),tf.ones.like(),tf.zeros(),tf.ones()用处是非常广泛的,比如y=wx+b,w通常都初始化为全1,b初始化为全0
2.4 fill
顾名思义,就是填满的意思
tf.fill([n,m],k)
意思就是用k填满这个[n,m]的矩阵
2.5 random(常见)
这个是创建一个随机数组,这个最常见其中包含正态分布,
1.正态分布
tf.random.normal([n,m],mean=1,stddev=1)
n行m列,然后均值mean为1,方差stddev为1
不指定的话就是01分布
tf.random.truncated_normal([2,2],mean=1,stddev=1)这是一个截断了的正态分布,有时候使用这个会好一点
tf.random.normal([2,2],mean=1,stddev=1)
tf.random.truncated_normal([2,2],mean=1,stddev=1)
2.均匀分布
tf.random.uniform([n,m],minval=,maxval=)
这个就是在minval和maxval之间均匀取样n行m列的数组
tf.random.uniform([2,2],minval=0,maxval=1)
tf.random.uniform([2,2],minval=0,maxval=10)
2.6 应用(random Permutation)
这个是将一个数组再重新打乱
2.7 tf.constant函数
就是这个和conver_to_tensor是一样的
3 存在意义
3.1 Scalar(标量)
这个里面的shape=()就是标量
3.2 Vector(向量)
其中这个x@w+b,这个b就是一个vector
3.3 Matrix(矩阵)
3.4 Dim=3 Tensor
这个在自然语言用的比较多,一个单词5个特征,1句话80个单词。
3.5 Dim=4 Tensor
这个通常对应图片,多张图片是[b,h,w,c],b是代表多张图片,h高,w宽,c什么样的图片,c=3彩色的
3.6 Dim=5 Tensor
4 Tensor 的索引和切片
▪ Basic indexing
-------1.[idx][idx][idx]
▪ Same with Numpy
-----1.[idx, idx,…]
-----2.start:end
-----3.start:end :step
4.1 基本索引(Basic indexing)
4.1.1 [,,,],索引
在这里如果我们想访问的时候一般不用[][],一般用[,,,]。
例如:
a=tf.random.normal([4,28,28,3])
a[1].shape #一般代表第二张照片的信息
=>[28,28,3]
a[1,2].shape #代表
=>[28,28]
a[1,2,3].shape
=>[3]
a[1,2,3,2].shape #代表某一张图片的像素,一般为0-256,或者标准化后的图像
4.1.2 start:end
在这里从前向后数第一个为0,从后往前数第一个为-1,但是注意这里是左闭右开的
扩展到高维中去:a[0,:,:,:]就是第一张图片的全部信息,a[:,:,:,0]单通道的
4.1.3 start:end :step
隔行取样,设置步长state
标签:tensor,28,gather,基础,TesorFlow,shape,zeros,TesorFlow03,tf From: https://www.cnblogs.com/lipu123/p/17483361.html