Python 官方文档:入门教程 => 点击学习
目录一、PyTorch 简介二、pytorch 优势三、pytorch 常用工具包四、pytorch 注意点五、pytorch 理解六、pytorch-Tensor七、python
特别注意一个问题:
通道问题:不同视觉库对于图像读取的方式不一样,图像通道也不一样:
OpenCV 的 imread 默认顺序时 H * W * C
pytorch的Tensor是 C * H * W
Tensorflow是两者都支持
tensor数据类型:3浮点(float16,float32,float64)5整数(int16,int32,int64,int8+uint8)
Data type | dtype | CPU tensor | GPU tensor |
---|---|---|---|
16-bit floating point | torch.float16 or torch.half | torch.HalfTensor | torch.cuda.HalfTensor |
32-bit floating point | torch.float32 or torch.float | torch.FloatTensor | torch.cuda.FloatTensor |
64-bit floating point | torch.float64 or torch.double | torch.DoubleTensor | torch.cuda.DoubleTensor |
Data type | dtype | CPU tensor | GPU tensor |
---|---|---|---|
8-bit integer(unsigned) | torch.uint8 | torch.ByteTensor | torch.cuda.ByteTensor |
8-bit integer(signed) | torch.int8 | torch.CharTensor | torch.cuda.CharTensor |
16-bit integer(signed) | torch.int16 or torch.short | torch.ShortTensor | torch.cuda.ShortTensor |
32-bit integer(signed) | torch.int32 or torch.int | torch.IntTensor | torch.cuda.IntTensor |
64-bit integer(signed) | torch.int64 or torch.long | torch.LongTensor | torch.cuda.LongTensor |
创建tensor的常见api
方法名 | 说明 |
---|---|
Tensor() | 直接从参数构造张量,支持list和numpy数组 |
eye(row,column) | 创建指定行数&列数的单位tensor(单位阵) |
linspace(start,end,count) | 在[s,e]上创建c个元素的一维tensor |
logspace(start,end,count) | 在[10s,10e]上创建c个元素的一维tensor |
ones(size) | 返回指定shape的tensor,元素初始值为1 |
zeros(size) | 返回指定shape的tensor,元素初始值为0 |
ones_like(t) | 返回一个tensor,shape与t相同,且元素初始值为1 |
zeros_like(t) | 返回一个tensor,shape与t相同,且元素初始值为1 |
arange(s,e,sep) | 在区间[s,e)上以间隔sep生成一个序列张量 |
tensor 对象的方法
方法名 | 作用 |
---|---|
size() | 返回张量的shape |
numel() | 计算tensor的元素个数 |
view(shape) | 修改tensor的shape,与np.reshape相似,view返回的是对象的共享内存 |
resize | 类似于view,但在size超出时会重新分配内存空间 |
item | 若为单元素tensor,则返回python的Scalar |
from_numpy | 从numpy数据填充 |
numpy | 返回ndarray类型 |
tensor对象通过一系列运算组成动态图,每个tensor对象都有以下几个控制求导的属性。
变量 | 作用 |
---|---|
requird_grad | 默认为False,表示变量是狗需要计算导数 |
grad_fn | 变量的梯度函数 |
grad | 变量对应的梯度 |
torch.nn提供了创建神经网络的基础构件,这些层都继承自Module类。下面是自己手动实现一个线性层(linear layer)。适当参考,以后直接调用现成的接口,这里稍微了解一下,无实际意义。
import torch
class Linear(torch.nn.Module):
def __init__(self, in_features, out_features, bias=True):
super(Linear, self).__init__()
# torch.randn() 返回一个符合均值为0,方差为1的正态分布
self.weight = torch.nn.Parameter(torch.randn(out_features, in_features))
if bias:
self.bias = torch.nn.Parameter(torch.randn(out_features))
def forward(self, x):
# xW+b
x = x.mm(self.weight)
if self.bias:
x = x + self.bias.expand_as(x)
return x
if __name__ == '__main__':
net = Linear(3,2)
x = net.forward
print('11',x)
下面表格中列出了比较重要的神经网络层组件。
对应的在nn.functional模块中,提供这些层对应的函数实现。
通常对于可训练参数的层使用module,而对于不需要训练参数的层如softmax这些,可以使用functional中的函数。
一些容器:
容器类型 | 功能 |
---|---|
Module | 神经网络模块基类 |
Sequential | 序贯模型,类似keras,用于构建序列型神经网络 |
ModuleList | 用于存储层,不接受输入 |
Parameters(t) | 模块的属性,用于保存其训练参数 |
ParameterList | 参数列表1 |
容器代码:
# 方法1 像
model1 = nn.Sequential()
model.add_module('fc1', nn.Linear(3,4))
model.add_module('fc2', nn.Linear(4,2))
model.add_module('output', nn.Softmax(2))
# 方法2
model2 = nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU()
)
# 方法3
model3 = nn.ModuleList([nn.Linear(3,4), nn.ReLU(), nn.Linear(4,2)])
编码三步走:
在pytorch中就只需要分三步:
到此这篇关于pytorch 简介及常用工具包展示的文章就介绍到这了,更多相关pytorch 常用工具包内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: pytorch简介及常用工具包展示
本文链接: https://lsjlt.com/news/197452.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0