[deeplearning-025]pytorch tutorial

本文是PyTorch的快速入门教程,涵盖了PyTorch官网资源、自动微分原理以及如何构建简单的神经网络。通过实例展示了如何在CPU和GPU上操作张量,以及如何利用autograd进行自动微分,为神经网络训练奠定基础。
摘要由CSDN通过智能技术生成

1.pytorch的官网
https://pytorch.org/


2.tutorials

2.1 Deep Learning with PyTorch: A 60 Minute Blitz

2.1.1 what is pytorch
  可以使用GPU的numpy替代者
  深度学习研究平台

  第一个demo,各种操做非常类似numpy
----------------
import torch
x = toruch.empty(5,3)
print(x)
----------------

  torch和numpy相互转化
----------------
import torch
import numpy as np

a = torch.ones(5)
b = a.numpy()

c = np.ones(5)
d = tourch.frome_numpy(c)
-----------------

  使用GPU
----------------
import torch

x = torch.rand(5,3)

if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    y = torch.ones_like(x, device=device)  # directly create a tensor on GPU
    x = x.to(device)                       # or just use strings ``.to("cuda")``
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # ``.to`` can also change dtype together!
----------------


2.1.2 autograd 自动微分

pytorch神经网络的核心是autograd包。这个包提供tensor上的所有操作的自动微分。autograd是运行时定义的。

torch.Tensor是pytorch的核心类。如果一个Tensor对象的属性requires_grad设置成True,那么,pytorch会跟踪这个对象上的所有运算,当全部计算完成后,调用backwoard()函数,可以自动计算出这个对象上的梯度,记录到这个对象的grad属性。注意detach()和with torch.no_grad()的用法。

Function类。Tensor和Function构造无环图。每个Tensor的grad_fn属性都指向一个创建这个Tensor的Function对象,有些grad_fn指向None,有些grad_fn指向有意义的函数。

调用一个Tensor对象的backward函数,可以得到它的微分结果。如果Tensor是一个标量,backward函数不需要指定参数。如果Tensor不是标量,需要给backward函数指定gradinet参数。

-------------------
import torch

x = torch.ones(2,2, requires_grad=True)

print(x)

y = x+2

print(y)

print(y.grad_fn)


z = y*y*3

print(z)
print(z.grad_fn)

out = z.mean()

print(out)
print(out.grad_fn)
-------------------

注意,out是最终输出结果,out是标量,因此可以求解具体的微分值。对神经网络的训练而言,大多数情况下,神经网络的输出层是向量,把输出层向量和目标值放到损失函数loss function,得到的是结果是标量,根据这个标量做自动微分,然后更新神经网络的参数。

https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html,注意这里,对自动微分的解释。
如果x是变量,中间无论经历过多少对x的操作,最后的结果一定是x的某种形式的函数。这个过程走一遍就知道了。

x.grad可以清空,否则就是累加。x.grad.data.zero_()是清空grad。

2.1.3 neual networks 神经网络
使用一个最简单的卷积核,py代码如下
----------------
import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        #输入图像1层,输出图像3层(也就是意味着有3个卷积核),2x2正方形卷积核(也就意味着这3个卷积核都是2x2的)
        self.conv1 = nn.Conv2d(1,3,2)

    #对x做卷积&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值