Pytorch用法说明
1. pytorch基本用法
1. torch.tensor
torch.tensor是默认的tensor类型(torch.Floattensor)的简称。
2. torch.Tensor与torch.tensor的区别
相同点: 两者都是用于生成新的张量tensor,其中tensor是一种数据类型。包含单一数据类型元素的多维矩阵。
不同点: torch.Tensor是python类,默认张量类型为torch.FloatTensor的别名。
例如,torch.Tensor([1,2])会调用Tensor类的构造函数init,生成floattensor类型的张量。 torch.tensor仅仅是python的函数,主要是将一个data封装成一个tensor。
其函数原型是:
torch.tensor(data,dtype=None,device=None,requires_grad=False)
其中data可以是list || tuple || array || scalar
等类型。torch.tensor可以从data中的数据部分做拷贝copy(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor、torch.DoubleTensor。
3. transforms.ToTensor与transforms.ToPILImage
torchvision.transforms中定义了一系列数据转换形式。有PILImage、numpy,Tensor之间的转换,还能对数据进行处理。
ToTensor:将PILImage或者numpy的ndarry转化成tensor。取值范围[0,1.0]
对于PILImage转化的tensor,其数据类型为torch.FloatTensor
把一个取值范围是[0,255]的PIL.Image转换成tensor
```img=Image.open()
out_img=transforms.ToTensor(img)```
对于ndarray的数据类型没有限制,但转化成tensor的数据类型是由ndarry的数据类型决定的。
shape为(H,W,C)的numpy.ndarray转换成形状为(C,H,W)、取值范围是[0,1.0]的tensor
ToPILImage:将Pnumpy的ndarry或者tensor转换成PILImage。PILImage取值范围为[0,255]
ndarry的数据类型要求是dtype=uint8,取值范围[0,255],shape为(H,W,C)
tensor的shape为CHW,只能是FLoatTensor类型。
相关链接:Pytorch之浅入torchvision.transforms.ToTensor与ToPILImage_啧啧啧biubiu的博客-CSDN博客_transforms.topilimagePytorch之浅入torchvision.transforms.ToTensor与ToPILImage Pytorch之浅入torchvision.transforms.ToTensor与ToPILImage_啧啧啧biubiu的博客-CSDN博客_transforms.topilimage
2. Pytorch错误类型
1. 模型的分类数不匹配
RuntimeError: CUDA error:CUBLAS_STATUS_ALLOC_FAILED when calling cublasCreate(handle)
2. 标签越界
RuntimeError: CUDA error: device-side assert triggered
Solution:
首先检查自己的标签是否从0开始;
将模型、损失函数、张量全部转到CPU上面运行或者debug,此时会报错具体的位置。因为cpu比cuda更能够定位自己的错误所在。在debug模式下,我发现的确是因为某个索引越界导致程序异常(但是cuda始终告诉我是标签越界)
3. pytorch中梯度求导只能针对FolatTensor类型吗?
Yes 关于这个问题如果有人了解,麻烦请告知一声,主要小编也不太清楚,只不过是根据所查资料得出的结论,若有错误,请加以指正。
根据Pytorch的设计,梯度只能计算浮点张量,即只有浮点张量才可求梯度。所以输入的数据必须为浮点类型张量。链接:pytorch的梯度计算以及backward方法 pytorch的梯度计算以及backward方法_耐耐~的博客-CSDN博客_pytorch求梯度
在输入的过程中并未对输入数据指定梯度要求,为什么还可进行求导,因为模型权重内部默认是required_grad=True,所以可进行求导。
Pytorch用法说明相关推荐
- pytorch用法笔记--不定期更新
torch.matmul(a,a.T) 矩阵乘以它的转置矩阵,如3*4,4*3,相乘后结果是一个3*3的对称矩阵 torch.diag(a, 2) 取以对角线为起点的元素,对角线的位置为0,2代表从对 ...
- 产品设计中重要的用户体验_为什么好的设计对任何产品都重要?
产品设计中重要的用户体验 设计,设计层次 (Design, Layers of design) Good design is always been a clear success to many o ...
- amaozn aws 设置_在aws上设置一个免费的piKong
amaozn aws 设置 A guide to setting up a FREE Pi-Hole instance on Amazon EC2 在Amazon EC2上设置免费的Pi-Hole实例 ...
- macos终端美化_关于macOS终端美化的最轻松的指南Z Shell中的速成课程
macos终端美化 Speeding it up more than the standard bash terminal that comes with your MacOS by using iT ...
- vue路由匹配实现包容性_简约设计,最大利润,包容性问题
vue路由匹配实现包容性 最小? 最大化? 准确? 不,不,不. (Minimal? Maximal? Accurate? Nope Nope Nope.) Many directors and th ...
- AUTOVC: Zero-Shot Voice Style Transfer with Only Autoencoder Loss 论文代码复现
0. 说明 https://github.com/auspicious3000/autovc 但是听Demo中, 涉及到unseen的情况, 合成音色确实像, 但是质量不满足商用 复现Git的代码, ...
- 从头开始实现YOLOV3
本讲义是关于从头开始构建YOLO v3检测器的简要说明,详细介绍了如何从配置文件创建网络架构,加载权重和设计输入/输出管道. 看懂后文说明的先决条件 对于后文的阅读,如果不熟悉一下概念的同学,请先复习 ...
- python中的numel()函数
numel()函数:返回数组中元素的个数 使用例子: params = sum(p.numel() for p in list(net.parameters())) / 1e6 # numel() p ...
- 【python】numel()
numel() 函数:返回数组中元素的个数 使用例子: params = sum(p.numel() for p in list(net.parameters())) / 1e6 # numel() ...
- Pytorch forward()的简单理解与用法
1.基本用法 在pytorch中,使用torch.nn包来构建神经网络,我们定义的网络继承自nn.Module类.而一个nn.Module包含神经网络的各个层(放在__init__里面)和前向传播方式 ...
最新文章
- FPGA设计心得(2)边沿检测的问题进一步说明(仿真中一定能得到上升沿的设计)
- amh支持java吗_AMH 6.0 发布,国内领先的云主机面板
- python模块初始与time、datetime及random
- 【学习笔记】《数据挖掘:理论与算法》CH3 从贝叶斯到决策树
- 前端学习(3250):一个简单的文件
- java 方法重载的作业_java第六章 方法及方法重载 课堂笔记、作业
- SpringBoot中快速实现邮箱发送
- 当自己颓废的时候怎么激励自己?
- ubuntu安装opencv的c++开发环境
- Android内核开发:图解Android系统的启动过程
- 【每日算法Day 65】你能顺利救出地下城里的公主吗?
- CMOS和TTL电路区别
- Unity 窗口界面的简单介绍
- 修改文件 火车票买下铺_12306修改代码买下铺?12306码农太弱了吧 (转载)
- sudo rosdep init 出现 ERROR: cannot download default sources list from:错误解决方法
- MPLUS 2-2-1型 中介效应模型
- minus oracle 顺序_Minus 在oracle 中的用法
- web安全实验:Attack1-6
- 遍历目录 nftw and ftw
- excel表格如何转换成word表格_如何将excel转换成word?如何将excel表格转换成word文档?...
热门文章