Pytorch常用函数(入门)

1 pytorch的常用各种函数

tensor的组合和分块
--->tensor.cat()/tensor.stack()(组合)
--->tensor.chunk()/tensor.split()(分块)
tensor的变形
--->tensor.view(),resize(),reshape()--调整Tensor的形状,元素总数相同
--->transpose()、permute()各维度之间的变换
--->squeeze()、unsqueeze()处理size()为1的维度
--->expand()、expand_as() 复制元素来扩展维度

1.1 张量的索引与组合

##使用...表示选择所有元素
a=torch.randn(3,3,28,28)
a[:,1,...].shape
torch.Size([3, 28, 28])
a=torch.randn(4,3,28,28)
a[:,1,...].shape
torch.Size([4, 28, 28])
##cat(对不同的张量进行拼接时,必须保证其他的维度一致)
a=torch.rand(2,3)
b=torch.rand(1,3)
torch.cat([a,b],dim=0).shape
[out]:tensor.Size([3,3])
##stack(再增加一个维度进行相加,叠加的基本单位为序列本身)
a=torch.rand(2,3)
b=torch.rand(2,3)
torch.stack([a,b],dim=0).shape
[out]:torch.Size([2,2,3])

1.2 张量的拆分

#split(可以按长度或者数量进行拆分)
a=torch.rand(2,3,3)
aa,bb=a.split(1,dim=0)    ##数量拆分
aa.shape
[out]:torch.Size([1,3,3])
bb.shape
[out]:torch.Size([1,3,3])
cc,dd=a.split([1,1],dim=0)  ##长度拆分
cc.shape
[out]:torch.Size([1,3,3])
dd.shape
[out]:torch.Size([1,3,3])

# chunk只能按照数量拆分,而不能按照长度拆分
a=torch.rand(4,3,3)
bb,cc=a.chunk([2,2],dim=0)---->会报错
#正确方法应该是
bb,cc=a.chunk(2,dim=0)

1.3 维度的扩展与压缩

b=torch.rand(32)
f=torch.rand(4,32,14,14)  
b=b.unsqueeze(1).unsqueeze(2).unsqueeze(0)
b.shape
torch.Size([1, 32, 1, 1])
##squeeze维度删减
b.shape
torch.Size([1, 32, 1, 1])
b.squeeze(0).shape
torch.Size([32, 1, 1])

1.4 维度数目扩展

expand维度数目扩展(前提必须是 扩张的维度必须相同,同时对于不扩展的可以使用-1表示,维度中较大的数一般是不能变小)


b=torch.randn(1,32,14,14)
b.shape
[out]:torch.Size([1, 32, 14, 14])
##
b.expand(4,32,14,14).shape
[out]:torch.Size([4, 32, 14, 14])
##
b.expand(-1,32,14,28).shape
[out]:torch.Size([1, 32, 14, 14])

repeat扩展(在原来的维度上进行扩展次数)

b=torch.randn(1,32,14,14)
b.repeat(4,1,1,1).shape
[out]torch.Size([4,32,14,14])

permute交换维度

b=torch.randn(4,3,28,32)
b.permute(0,2,3,1).shape#按下标进行交换
[out]:torch.Size([4,28,32,3])

2 Autograd与计算图

autograd自动求导是动态图,指在程序运行时,每次前向传播时是从头开始构建计算图,这样不同的前向传播就可以有不同的传播图。

参考来源:https://zhuanlan.zhihu.com/p/69294347

3 神经网络工具箱torch.nn

3.1 nn.module

3.1.1 nn.Parameter函数

在类init()中需要定义网络学习的参数,在此使用nn.Parameter()函数定义了全连接的w和b,这是一种特殊的Tensor的构造方法,默认需要求导,即requires_grad为True。

3.1.2 forward()函数与反向传播

forward()函数用来进行网络的前向传播,并需要传入相应的Tensor。

3.1.3 多个module的嵌套

即定义好一个nn.module,可以多次进行调用

3.1.4 nn.Module与nn.functional库

利用nn.functional定义的网络层不可自动学习参数,需要nn.Parameter封装。

nn.functional的设计初衷是针对一些不需要学习参数的层,如激活函数BN。

总的来说,对于需要学习参数的层,最好使用nn.Module,对于无参数学习的层,可以使用nn.functional。

3.1.5 nn.Sequential()模块

当模块中只是简单的前馈网络时,即上一层的输出直接作为下一层的输入,即可以快速搭建nn.Sequential()模块来快速搭建模块。而不必手动在forward()函数中一层一层的向前传播

from torch import nn
class Perception(nn.Module):
	def __init__(self,in_dim,hid_dim,out_dim):
		super(Perception,self).__init__()
		##利用nn.Sequential()快速搭建网络模块
		self.layer==nn.Sequential(
		nn.Linear(in_dim,hid_dim),
		nn.Sigmoid(),
		nn.Linear(hid_mid,out_dim),
		nn.Sigmoid()
		)
	def forward(self,x):
		y=self.layer(x)
		return y

3.2 损失函数

损失反映模型最后预测结果与实际真实值之间的差距,可以用来分析训练过程的好坏,模型是否收敛等问题

output=torch.Tensor([[0.7654,0.0308],[0.7892,0.0386],[0.7779,0.0331],[0.7781,0.0326]])
output.shape
[out]:torch.Size([4, 2])

label=torch.Tensor([0,1,1,0]).long()
criterion=nn.CrossEntropyLoss()
loss_nn=criterion(output,label)
loss_nn
[out]:tensor(0.7627)

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《PyTorch深度学习入门与实战》是一本以PyTorch为工具,介绍深度学习基础知识和实践的书籍。在本书中,作者通过简洁易懂的语言,结合实际案例,帮助读者理解深度学习的基本概念和原理,并教授如何使用PyTorch库来实现各种深度学习模型。 本书内容主要分为两部分,第一部分是深度学习的基础知识,包括神经网络、卷积神经网络、循环神经网络等;第二部分是深度学习的实践技巧,包括数据预处理、模型训练、模型优化等。通过这两部分的学习,读者可以逐步掌握深度学习的基本原理和实践技巧。 此外,本书还特别注重实战,为读者提供了大量的代码实例和实战案例。这些实例和案例不仅包括经典的深度学习任务,如图像分类、目标检测和语言生成等,还包括一些实际应用,如机器翻译、垃圾邮件识别等。通过这些实例和案例的学习,读者可以更好地理解深度学习的实际应用和解决实际问题的能力。 总的来说,本书以PyTorch为工具,以深度学习基础知识和实际案例为主线,通过深入浅出的讲解,帮助读者入门深度学习,并掌握使用PyTorch来实现深度学习模型的能力。无论是对于初学者还是有一定经验的开发者来说,《PyTorch深度学习入门与实战》都是一本很好的学习资料。 ### 回答2: 《PyTorch深度学习入门与实战》是一本介绍PyTorch深度学习库的教程图书。PyTorch是一种在机器学习领域广泛使用的开源深度学习库,它以动态图和静态图的混合方式,提供了灵活、高效的工具来构建和训练神经网络模型。 该书的目的是帮助读者快速入门PyTorch,并通过实战案例实践所学的知识。书中提供了丰富的示例代码和实验,从基础概念开始,逐步引导读者理解和掌握PyTorch的核心功能和应用。 在第一部分中,书籍详细介绍了PyTorch的安装和配置,包括如何创建和管理虚拟环境,以及如何使用pip安装PyTorch及其相关库。 第二部分主要介绍了PyTorch张量(Tensor)的基本操作和运算。这是深度学习中的基础,掌握好张量的操作对于后续的模型构建和训练非常重要。本书中通过大量的示例代码和实验,让读者逐步熟悉张量的创建、索引、切片以及各种元素级别的运算操作。 第三部分是关于PyTorch神经网络模块(nn)的详细介绍,包括如何使用nn.Module构建网络模型,以及如何使用nn.functional模块定义前向传播方法。同时也介绍了常用的损失函数和优化器,在训练模型时如何选择和使用它们。 第四部分是实战篇,书中通过几个典型的深度学习任务案例,如图像分类、目标检测和自然语言处理等,示范了如何使用PyTorch构建和训练神经网络模型。每个案例都包括了详细的代码解析和实验结果展示,读者可以通过这些案例学习和掌握如何在实际项目中应用PyTorch进行深度学习。 总之,《PyTorch深度学习入门与实战》是一本非常实用的教程图书,适合对PyTorch感兴趣的初学者和有一定基础的开发者阅读。通过阅读本书,读者可以系统性地学习和掌握PyTorch深度学习框架,为深度学习的实战应用提供基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值