《动手学深度学习PyTorch版》打卡_Task1,pytorch的常见函数

最近参加了伯禹平台和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])

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值