最近参加了伯禹平台和Datawhale等举办的《动手学深度学习PyTorch版》课程,也为了自己能尽快熟悉pytorch这个框架在这里整理一下自己遇到的pytorch常见函数。
torch.ones()
torch.ones(*sizes, out=None) → Tensor
#返回一个全为标量 1 的张量,形状由可变参数sizes 定义。
#sizes (int...) – 整数序列,定义了输出形状
#out (Tensor, optional) – 结果张量
torch.ones(2, 3)
torch.ones(5)
torch.zeros()
torch.zeros(*sizes, out=None) → Tensor
#返回一个全为标量 0 的张量,形状由可变参数sizes 定义。
#sizes (int...) – 整数序列,定义了输出形状
#out (Tensor, optional) – 结果张量
torch.randn()
torch.randn(*sizes, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
#返回一个填充了正态分布中随机数的张量,均值为“0”,方差为“1”(也称为标准正态分布)。定义输出张量形状的整数序列
requires_grad_()
1. 所有的tensor都有.requires_grad属性,可以设置这个属性.
x = tensor.ones(2,4,requires_grad=True)
2.如果想改变这个属性,就调用tensor.requires_grad_()方法:
x.requires_grad_(False)
torch.mm()
torch.mul(a, b)是矩阵a和b对应位相乘,a和b的维度必须相等,比如a的维度是(1, 2),b的维度是(1, 2),返回的仍是(1, 2)的矩阵
torch.mm(a, b)是矩阵a和b矩阵相乘,比如a的维度是(1, 2),b的维度是(2, 3),返回的就是(1, 3)的矩阵
————————————————
原文链接:https://blog.youkuaiyun.com/Real_Brilliant/article/details/85756477
torch.view(-1,28*28)
view()
返回的数据和传入的tensor一样,只是形状不同- -1在这里的意思是让电脑帮我们计算,比如下面的例子,总长度是20,我们不想自己算20/5=420/5=4,就可以在不想算的位置放上-1,电脑就会自己计算对应的数字,这个在实际搭建网络的时候是很好用的
- 还要注意
view()
返回的tensor和传入的tensor共享内存,意思就是修改其中一个,数据都会变
import torch
a = torch.arange(0,20) #此时a的shape是(1,20)
a.view(4,5).shape #输出为(4,5)
a.view(-1,5).shape #输出为(4,5)
a.view(4,-1).shape #输出为(4,5)
原文链接:https://www.cnblogs.com/MartinLwx/p/10543604.html
谈到view就得注意pytorch中的广播机制:
当对两个形状不同的 Tensor 按元素运算时,可能会触发⼴广播(broadcasting)机制:先适当复制元素使这两个 Tensor 形状相同后再按元素运算:
两个 Tensors 只有在下列情况下才能进行 broadcasting 操作:
每个 tensor 至少有一维
遍历所有的维度,从尾部维度开始,每个对应的维度大小要么相同,要么其中一个是 1,要么其中一个不存在。
可见链接https://blog.youkuaiyun.com/weixin_41413177/article/details/89336066
DataLoader的使用
import torch.utils.data as Data
batch_size = 10
# combine featues and labels of dataset
dataset = Data.TensorDataset(features, labels)
# put dataset into DataLoader
data_iter = Data.DataLoader(
dataset=dataset, # torch TensorDataset format
batch_size=batch_size, # mini batch size
shuffle=True, # whether shuffle the data or not
num_workers=2, # read data in multithreading
)
建立网络的几种方式:
# ways to init a multilayer network
# method one
net = nn.Sequential(
nn.Linear(num_inputs, 1)
# other layers can be added here
)
# method two
net = nn.Sequential()
net.add_module('linear', nn.Linear(num_inputs, 1))
# net.add_module ......
# method three
from collections import OrderedDict
net = nn.Sequential(OrderedDict([
('linear', nn.Linear(num_inputs, 1))
# ......
]))
print(net)
print(net[0])