目录
(1条消息) Pytorch框架的学习(2)_An efforter的博客-CSDN博客
(1条消息) Pytorch框架的学习(3)_An efforter的博客-CSDN博客
pytorch的三大基本的概念:tensor(张量),Variable(变量),nn.Module(网络结构)
从上图中,我们一点一点的引入,标量是零维的张量,向量是一维的张量,矩阵是二维的张量。从上图右边中就可以看出来。
引入到真实操作中:
先解释样本与张量关系:
算法工程师经常提到一个名词:我的数据怎么怎么样,这个数据其实就是样本,tensor(张量)就是把样本的特征给描述出来。
再深入一点,怎么描述?
可以这么想,其实就是我们选择一张图片,彩色图片(RGB)含有三个通道,每一通道就是当成一矩阵,图片中含有特征的,那么在矩阵中就会对应第几行几列的数值。那么H*W*C(长*宽*通道)就是一个标量。
解释模型与张量关系:
模型包含两类:有参与无参模型。 对应着上图中Y=W*X+b函数来看,X就是样本,W与b在未知的情况下是变量。变量也是用tensor表示的。最后的到Y(标签)也是进行数字化的,所以和tensor也形成了直接联系。
tensor的类型,跟c语言中学习的差不多,无非加了在torch下的类型。
结合代码操作:
- import torch
- a=torch.Tensor([[1,2],[3,4]])
- print(a)
- print(a.type())
-
- b=torch.ones(2,2)
- print(b)
- print(b.type())
-
- c=torch.Tensor(2,3)
- c=torch.zeros_like(c) #把c的格式仿过来就变成两行三列都是0
- d=torch.ones_like(c) #把c的格式仿过来就变成两行三列都是1
- print(c)
- print(d)
-
- #随机
- e=torch.rand(2,2)
- print(e)
-
- #随机打乱0-9
- e=torch.randperm(10)
- print(e)
-
- #标准分布
- f=torch.normal(mean=0.0,std=torch.rand(5)) #std是标准差
- print(f)
-
- #取范围
- g= torch.Tensor( 2,2).uniform_( -1,1) #在-1,1之间
- print(g)
-
- #torch 中的序列
- h= torch.arange (0,10,1)
- print(h)
-
- I= torch.linspace( 2,10,3)
- print(I)
对应的输出:
实例:torch.tensor ( [1,2,3], dtype=torch.float32,device=torch.device('cpu') )
- #稀疏的张量
- import torch
- dev=torch.device("cpu") #指定cpu
- a=torch.tensor([2,2],
- dtype=torch.float32, #tensor的三个参数
- device = dev)
- i= torch.tensor([[0,1,2],[0,1,2]])
- v = torch.tensor([3,4,5],dtype =torch.float32)
- x= torch.sparse_coo_tensor(i, v,[4,4],dtype=int,device="cuda").to_dense()
- print(x)
以下图片代码都是一些使用方式:
(1).加法运算
(2).减法运算
(3).乘法运算
(4).除法运算
(5).矩阵运算
(6).幂运算
特殊的e^(a):
(7).开方运算
(8).对数运算 第三、四个方式底数是e
(9).tensor的取整/取余运算
- import torch
- a=torch.rand(2,2)
- a=a*10
- print(a)
- print(torch.floor(a))
- print(torch.ceil(a))
- print(torch.round(a))
- print(torch.trunc(a))
- print(torch.frac(a))
- print(a%2)
测试结果:
(10).tensor的比较运算
- import torch
- a=torch.rand(2,3)
- b=torch.rand(2,3)
- print(a)
- print(b)
- print(torch.eq(a,b))
- print(torch.equal(a,b))
- print(torch.ge(a,b))#大于等于
- print(torch.gt(a,b))#大于
- print(torch.lt(a,b))#小于
- print(torch.ne(a,b))#不等于
(11).Tensor的取前k大/前k小/第k小的数值及其索引
- c=torch.tensor([[1,2,3,4,2],
- [2,3,4,12,3]])
- print(c.shape)
- print(torch.sort(c))
- print(torch.sort(c,dim=1,descending=True))
- #value就是值,indices就是索引值对应原来摆放的位置
-
- ##topk
- d=torch.tensor([[12,3,1,2,4],[4,2,6,4,5]])
- print(d.shape)
- print(torch.topk(d,k=1,dim=0)) #在0维中组合成一个最大数组[12,3,3,4,5]
- print(torch.topk(d,k=2,dim=1))#在一维中找到最大值两个【12,4】,【5,4】
- print(torch.kthvalue(d,k=2,dim=1)) #在一维中找第二小的【2,4】
测试结果:
(12).Tensor判定是否为finite/inf/nan (有界/无界/张量中是否存在空值)
- ##有界无界是否为空
- a=torch.rand (2,3)
- print(a)
- print (torch.isfinite(a) )
- print(torch.isfinite(a/0))
- print (torch. isinf(a/0))
- print(torch.isnan (a))
测试结果:
(13).tensor的三角函数
(14)tensor的其他的数学函数