深度学习框架Pytorch入门与实践——读书笔记

2 快速入门

2.1 安装和配置

pip install torch
pip install torchvision

#IPython魔术命令
import torch as t
a=t.Tensor(3,4)
%timeit a.sum()  #检测某条语句的执行时间
%hist                  #查看输入历史

2.2.2 Autograd:自动微分

autograd.Variable是Autograd中的核心类。
Variable主要包含三个属性:

  • data:保存Variable所包含的Tensor
  • grad:保存data对应的梯度,grad也是个Variable,而不是Tensor,它和data的形状一样。
  • grad_fn:指向一个Function对象,这个Function用来反向传播计算输入的梯度。

Autograd实现了反向传播功能,但是使用还略显复杂。torch.nn是专门为神经网络设计的模块化接口。nn构建于Autograd之上,可用来定义和运行神经网络。

import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
      def __init__(self):
         super(Net,self).__init__()
         self.conv1 = nn.Conv2d(1,6,5)
         self.conv2 = nn.Conv2d(6,16,5)
         self.fc1 = nn.Linear(16*5*5,120)
         self.fc2 = nn.Linear(120,84)
         self.fc3 = nn.Linear(84,10)
     def forward(self,x):
        x = F.max_pool2d(F.relu(self.conv1(x)),(2,2))
        x = F.max_pool2d(F.relu(self.conv2(x)),2)
        x = x.view(x.size()[0],-1)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
net = Net()
print(net)

for name,parameters in net.named_parameters():
    print(name,':',parameters.size())

forward函数的输入和输出都Variable,只有Variable才具有自动求导功能,Tensor是没有的,需封装称Variable。
torch.nn只支持mini-batches,不支持一次只输入一个样本,即每次输入必为1个batch。如果只输入一个样本,则用input.unsqueeze(0)将batch_size设置为1.例如,nn.Conv2d输入必须为4维的,形如nSamplesnChannelsHeightWidth,可将nSample设置为1,即1nChannelsHeightWidth。

nn实现了神经网络中大多数的损失函数。例如nn.MESLoss用来计算均方误差,nn.CrossEntropyLoss用来计算交叉熵函数。

torchvision实现了常用的图像数据加载功能,例如Imagenet、CIFAR10、MNIST等,以及常用的数据转换操作。
CIFAR分类步骤:

  • 使用torchvision加载并预处理CIFAR-10数据集。
  • 定义网络。
  • 定义损失函数和优化器。
  • 训练网络并更新网络参数
  • 测试网络。
    CIFAR-10是一个常用的彩色图片数据集(http://www.cs.toronto.edu/~kriz/cifar.html)。
    Dataset对象是一个数据集,可以按下标访问,返回形如(data,label)的数据。
    DataLoader是一个可迭代的对象,它将dataset返回的每一条数据样本拼接成一个batch,并提供多线程加速优化和数据打乱等操作。当程序对dataset的所有数据遍历完一遍后,对DataLoader也完成了一次迭代。
    所有的网络训练流程都类似:
  • 输入数据
  • 前向传播+反向传播
  • 更新参数

3 Tensor和autograd

可以通过tensor.view方法来调整tensor的形状,但必须保证调整前后元素总数一致。view不会修改自身的数据,返回的新tensor与源tensor共享内存,会发生联动。在实际应用中如果修改维度,需要使用sequeeze和unsqueeze两个函数。
resize为调整size的另一种方法,此方法可以修改tensor的尺寸。如果修改后的尺寸超过了原尺寸,会自动分配新的内存空间。如果修改后的尺寸小于原尺寸,则之前的数据依旧会保存。

函数 功能
index_select(input, dim, index) 在指定维度dim上选取,例如选取某些行、某些列
masked_select(input, mask) 例如a[a>0],使用ByteTensor进行选取
non_zero(input) 非0元素的下标
gather(input, dim, index) 根据index,在dim维度上选取数据,输出的size与index一样

gather是较为复杂的操作,对于一个二维tensor,输出的每个元素如下:

out[i][j] = input[index[i][j]][j] #dim=0
out[i][j] = input[i][index[i][j]] #dim=1

与gather相对应的逆操作为scatter_,gather把数据从input中按index取出,而scatter_是把取出的数据再放回去。scatter_函数是inplace操作。

out = input .gather(dim,index)  #---->近似逆操作
out = Tensor()
out.scatter_(dim,index)

https://blog.csdn.net/akari0216/article/details/108573648
PyTorch 0.2的高级索引一般不和原始的Tensor共享内存。
Tensor有不同的数据类型,每种类型分别对应CPU和GPU版本(HalfTensor除外)。默认的tensor是FloatTensor,可通过t.set_deault_tensor_type修改默认tensor类型(如果默认类型为GPU tensor,则所有操作都将在GPU上进行)。Tensor的类型对分析内存占用很有帮助。例如,一个size为(1000,1000,1000)的Float-Tensor,它有100010001000=10^9个元素,每个元素占32bit/8=4Byte内存,所以共占4GB内存/显存。HalfTensor是专门为GPU版本设计的,同样的元素个数,显存占用只有FloatTensor的一半,可以极大地缓解GPU显存不足的问题,但由于HalfTensor表示的数值和精度有限,所以容易出现溢出的问题。
tensor数据类型

数据类型 CPU tensor GPU tensor
32bit 浮点 torch.FloatTensor torch.cuda.FloatTensor
64bit浮点 torch.DoubleTensor torch.cuda.DoubleTensor
16bit半精度浮点 N/A torch.cuda.HalfTensor
8bit无符号整形(0~255) torch.ByteTensor torch.cuda.ByteTensor
8bit有符号整形(-128~127) torch.CharTensor torch.cuda.CharTensor
16bit有符号整形 torch.ShortTensor torch.cuda.ShortTensor
32bit有符号整形 torch.IntTensor torch.cuda.IntTensor
64bit有符号整形 torch.LongTensor torch.cuda.LongTensor

各数据类型之间可以相互转换,type(new_type)是通用的做法,同时还有float、long、half等快捷方法。CPU tensor和GPU tensor之间的互相转换通过tensor.cuda和tensor.cpu的方法实现。
常见的逐元素操作

函数 功能
abs/sqrt/div/exp/fmod/log/pow 绝对值/平方根/除法/指数/求余/求幂
cos/sin/asin/atan2/cosh 三角函数
ceil/round/floor/trunc 上取整/四舍五入/下取整/只保留整数部分
clamp(input, min, max) 超过min和max部分截断
sigmod/tanh… 激活函数

归并操作

函数 功能
mean/sum/median/mode 均值/和/中位数/众数
norm/dist 范数/距离
std/var 标准差/方差
cumsum/cumprod 累加/累乘

以上函数大多含有参数,dim的关联可以按下记忆。

### 回答1: 《深度学习框架PyTorch入门实践 第二版》是一本介绍PyTorch深度学习框架的实用教程。该教程适合对深度学习PyTorch有一定了解的读者,旨在帮助读者了解PyTorch的基础知识和应用技巧。 本书首先详细介绍了PyTorch的基本概念和基础操作,从创建张量、计算图、自动求导到优化器等方面进行了全面的讲解。接着,书中介绍了如何使用PyTorch构建深度学习模型,包括图像分类、目标检测、生成对抗网络等常见任务。在构建模型的过程中,作者详细解释了模型设计的技巧,如模型组件的选择、超参数的调整等。 此外,书中还介绍了PyTorch在自然语言处理、推荐系统和强化学习等领域的应用。每个应用场景都有详细的实例代码和实验结果分析,有助于读者理解如何将PyTorch应用到不同领域的问题中。 《深度学习框架PyTorch入门实践 第二版》在第一版的基础上更新了内容,包括新特性和最新的发展趋势。读者可以通过这本书更深入地了解PyTorch的使用,并掌握一些高级的技巧和工具。 总之,《深度学习框架PyTorch入门实践 第二版》是一本适合深度学习PyTorch初学者的入门教程。通过学习本书,读者可以快速上手PyTorch,并具备构建和训练深度学习模型的基本能力。 ### 回答2: 《深度学习框架PyTorch入门实践 第二版》是一本介绍PyTorch深度学习框架实践指南。本书适合有一定编程基础和机器学习知识的读者。下面我将对该书进行详细介绍。 第二版主要介绍了PyTorch的基本概念、核心功能和常用工具,涵盖了PyTorch的基本操作、张量运算、神经网络模型的构建训练、图像处理和自然语言处理等内容。 本书的逻辑结构清晰,从简单到复杂地介绍了PyTorch的基础知识和操作,为读者提供了全面深入的学习指南。书中通过大量的实例和代码演示,帮助读者理解和掌握PyTorch的使用方法。 此外,本书还对深度学习领域的一些热门技术和应用进行了介绍,如深度卷积神经网络、循环神经网络、生成对抗网络、目标检测和图像分割等。这些内容能够帮助读者进一步学习和应用PyTorch解决实际问题。 总之,《深度学习框架PyTorch入门实践 第二版》是一本深入浅出的PyTorch学习指南,内容详实全面。通过阅读本书,读者可以系统地学习和理解PyTorch的使用方法,掌握深度学习的核心技术和应用。无论是对初学者还是有一定经验的读者来说,都是一本值得推荐的参考书籍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值