PyTorch学习笔记
文章目录
- 1 PyTorch基本数据类型
- 1.1 与Python的比较
- 1.2 标量(dim=0)
- 1.3 张量/向量(dim=1)
- 1.4 dim,size and shape
- 1.5 dim = 3的tensor
- 1.6 dim = 4的tensor
- 1.7 一些其他知识
- 2 创建Tensor
- 2.1 从Numpy中导入
- 2.2 使用其他方式创建Tensor
- 3 nn.Module
- 3.1 nn.Module的好处
- 3.1.1 embed current layers
- 3.1.2 Container
- 3.1.3 parameters
- 3.1.4 modules
- 3.1.5 to(device)
- 3.1.6 save and load
- 3.1.7 train/test
- 3.1.8 implement own layer
- 4 Merge or split
- 4.1 Cat
- 4.2 Stack
- 4.3 Split
- 4.4 Chunk
1 PyTorch基本数据类型
1.1 与Python的比较
※PyTorch无法对str类型表示
Pytorch只能用以下两种方法来表示string:
① One-Hot
[0,1]——猫
[1,0]——狗
②Embedding
·Word2vec
·glove
a = torch.randn(2, 3)
print(a.type())
print(type(a))
print(isinstance(a, torch.FloatTensor))#合法化检验
1.2 标量(dim=0)
a = torch.tensor(1.)
print(a)
print(torch.tensor(1.3))
print(a.shape)
print(len(a.shape))
print(a.size())
标量常用来计算Loss
1.3 张量/向量(dim=1)
a = torch.tensor([1.1])
b = torch.tensor([1.1,2.2])
c = torch.FloatTensor(1)
d = torch.FloatTensor(2)
e = torch.from_numpy(np.ones(2))
print(a)
print(b)
print(c)
print(d)
print(e)
dim = 1的向量经常用于Bias,Linear Input
1.4 dim,size and shape
通常说的二维,指的是dimension,数学中称为Rank
dim指的是size/shape的长度
size/shape指的是tensor的形状
a = torch.randn(3, 4)
print(a.shape)
print(a.size(0),a.size(1))
print(a.shape[0], a.shape[1])
区别于Numpy库,Pytorch中的size(),shape()函数用法都是返回Tensor大小。
可以说,size(0) = shape[0]
附Numpy库:
size():返回矩阵元素的总个数
shape():返回矩阵的形状大小
此处常用于:Linear,Input,Batch
1.5 dim = 3的tensor
a = torch.rand(2,1, 3)
print(a)
print(a[0])
print(a.shape)
常用于:RNN,Input,Batch
1.6 dim = 4的tensor
四维Tensor最常用的场合即是图片处理了。
torch.size([2,3,28,28])代表了:[b,c,h,w]
2张图片,三个通道,28*28的图片大小
1.7 一些其他知识
a = torch.rand(2,1, 3)
print(a.numel())#number of element
print(a.dim())
2 创建Tensor
2.1 从Numpy中导入
可以使用torch.from_numpy()将numpy中创建的array转换为Tensor
2.2 使用其他方式创建Tensor
直接使用torch.tensor().
需要注意Tensor()和FloatTensor()作用一致,均需要传入shape参数进行创建Tensor,ch
tensor()需要传入具体数值
3 nn.Module
nn.Module是Pytorch中所有网络层次类的父类,如果我们需要实现一个层的时候,必须要继承这个类。当我们实现一些现有的层,也是要继承自nn.Module
Magic
- Every Layer in nn.Module
nn.Linear
nn.BatchNorm2d
nn.Conv2d - nn.Module nested in nn.Module
3.1 nn.Module的好处
3.1.1 embed current layers
- Linear
- ReLU
- Sigmoid
- Conv2d
- ConvTransposed2d
- Dropout
- etc.
3.1.2 Container
- sele.net() = nn.Sequential()
可以自动完成forward操作
3.1.3 parameters
- list(net.parameters())
可以查看参数 - list(net.named_parameters())
可以返回字典,PyTorch自动为参数命名 - 可以直接将参数传入优化器中
optimizer = optim.SGD(net.parameters())
3.1.4 modules
- modules: all nodes
- children: direct children
3.1.5 to(device)
device = torch.device(‘cuda’)
net = Net()
net.to(device)
将函数转移至cuda上工作
3.1.6 save and load
在训练过程中,为防止意外事故发生,PyTorch可以自动保存中间状态
torch.save(net.state_dict(),‘ckpt.mdl’)
同时网络开始工作时,也可以检查是否有checkpoint
net.load_state_dict(torch.load(‘ckpt.mdl’))
3.1.7 train/test
对于dropout和BN来说,train和test数据是不太一样的,所以可以在train和test中切换
net.train()
net.eval()
3.1.8 implement own layer
4 Merge or split
4.1 Cat
a = torch.rand(4, 32, 8)
b = torch.rand(5, 32, 8)
print(torch.cat([a, b], dim=0).shape)
4.2 Stack
与concat不同的是,stack会创建一个新的维度
a = torch.rand(4, 32, 8)
b = torch.rand(4, 32, 8)
print(torch.cat([a, b], dim=0).shape)
print(torch.stack([a, b], dim=0).shape)
可以理解为:当新维度取0,后面是a的数值,新维度取1,后面是b的数值
4.3 Split
根据长度进行拆分
a = torch.rand(4, 32, 8)
aa, bb, cc, dd = a.split(1, dim=0)
print(aa.shape, bb.shape, cc.shape, dd.shape)
指定长度进行拆分
a = torch.rand(4, 32, 8)
aa, bb = a.split([1,3], dim=0)
print(aa.shape, bb.shape)
4.4 Chunk
根据数量进行拆分
a = torch.rand(4, 32, 8)
aa, bb = a.chunk(2, dim=0)
print(aa.shape, bb.shape)
PyTorch学习笔记相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- pytorch学习笔记(二):gradien
pytorch学习笔记(二):gradient 2017年01月21日 11:15:45 阅读数:17030
- PyTorch学习笔记(二)——回归
PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...
- pytorch 学习笔记目录
1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...
- pytorch学习笔记 torchnn.ModuleList
1 nn.ModuleList原理 nn.ModuleList,它是一个储存不同 module,并自动将每个 module 的 parameters 添加到网络之中的容器. 你可以把任意 nn.Mod ...
- 深度学习入门之PyTorch学习笔记:卷积神经网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...
- 深度学习入门之PyTorch学习笔记:多层全连接网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 3.1 PyTorch基础 3.2 线性模型 3.2.1 问题介绍 3.2.2 一维线性回归 3.2 ...
- 深度学习入门之PyTorch学习笔记:深度学习框架
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 2.1 深度学习框架介绍 2.1.1 TensorFlow 2.1.2 Caffe 2.1.3 Theano 2.1.4 ...
- 深度学习入门之PyTorch学习笔记:深度学习介绍
深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...
- 深度学习入门之PyTorch学习笔记
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 5 循环神经网络 6 生成对抗网络 7 深度学习实战 参考资料 绪论 深度学习如今 ...
最新文章
- 在MasterPage下FindControl的使用方法
- Android Studio 第五十一期 - 自定义RecycleView Gallery
- Unity3D安卓程序中常用静态方法封装
- python for-Python for windows官方版
- 陕西中小企业促进局 e-mail_重点注意2020陕西工程师职称评审破格指南
- 《Arduino开发实战指南:LabVIEW卷》——3.2 LabVIEW的数据流编程方法
- extmail mysql数据库 重启_centos 5.8 x86_64下安装mysql+postfix+extmail+extman+courier-authlib+courier-imap...
- jquery实现抽奖系统
- 10 个常用的软件架构模式
- ljc.framework_Java 9模块系统(拼图)@ LJC的HackTheTower
- explicitWidth与width,和用setActualSize()方法有什么区别?
- Ubuntu下跑通py-faster-rcnn、详解demo运作流程
- 手机版php7怎么安装,Centos7 安装 PHP7最新版的详细教程
- STC单片机串口输出ADXL335角度值
- Android Studio 主题、字体大小的设置
- sun的java认证考试_Sun Java认证考试科目
- 【海康威视】WPF客户端二次开发:【2】语音对讲
- HLW8032做220V电量采集方案测试
- 小米pro15拆机_15.6寸小米笔记本Pro拆后盖加装扩展硬盘图文记录
- 理解的三极管输出特性曲线图的放大区和饱和区,利用∆Ic小于∆βIb差值比较曲线左移右移关系