从今天起要从头开始学习PyTorch了,在此记下笔记。

PyTorch 入门第一步

Tensor

import Torch as t
x = t.tensor(5,3)#生成5*3的矩阵
print(x.size())# 输出x的维度
print(x.size()[0]) #输出x的第0维
print(x.size(0))# 输出x的第0维y = t.rand(5,3)# 生成0-1之间的随机数矩阵
# 加法
x + y
t.add(x,y)
result = t.rand(5,3)
t.add(x,y,out=result)

inplace

y.add(x)#不改变y的值
y.add_(x)# 改变y的值

函数名带下划线的会修改Tensor本身,x.add(y),x.t()会返回一个新的Tensor,而x不变,但x.add_(y)改变x。

Tensor 与 numpy

tensor转numpy

a = t.tensor(5,3)
b = a.numpy()

numpy 转 tensor

import numpy as np
a = np.ones(5)
b = t.from_numpy(a)

转换之后,因为tensor和numpy共享内存,所以一个改变另一个也会被改变。

AutoGrad自动微分

Variable

data:tensor

grad:存梯度,也是一个variable

gradfn:function,反向传播计算输入的梯度

from torch.autograd import Variable
x = Variable(t.ones(2,2),require_grad=True)
y = x.sum()
y.backward()
print(x.grad)
# 1, 1
# 1, 1

梯度在反向传播过程中是累加的,故每次反向传播都会累加之前的梯度,所以反向传播之前要把梯度清0.

x.grad.data.zero_()

神经网络

定义网络

  1. 继承nn.Module
  2. 实现nn.Module中forward方法
  3. 把具有可学习参数的层放在构造函数__init()__中(不可学习参数的层可放可不放)
import torch.nn as nn
import torch
import torch.nn.functional as F
from torch.autograd import Variableclass MyNet(nn.Module):def __init__(self):# nn.Module子类的函数必须在构造函数中执行父类的构造函数super(MyNet, self).__init__()self.first = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3)self.second = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3)self.Linear1 = nn.Linear(in_features=32*12*12, out_features=20)self.Linear2 = nn.Linear(in_features=20, out_features=1)def forward(self, x):x = self.first(x)x = F.relu(x)x = self.second(x)x = F.relu(x)x = x.view(x.size()[0], -1)x = self.Linear1(x)x = self.Linear2(x)return xNet = MyNet()
print(Net)

定义了forward函数之后,backward会被自动实现。

# 网络参数
params = list(Net.parameters())
print(len(params))
# Net.named_parameters()可返回可学习的参数和名称
for name, parameters in Net.named_parameters():print(name, ":", parameters.size())

forward函数的输入输出均是Variable

input = Variable(torch.rand((1, 3, 16, 16)))
out = Net(input)
print(out.size())

torch.nn只支持mini-natch,故输入必须是4维的,

损失函数

target = torch.rand((1, 1))
criterion = nn.MSELoss()
loss = criterion(out, target)
print(loss)

Net.zero_grad()
print("反向传播之前的梯度:", Net.first.bias.grad)
loss.backward()
print("反向传播之后的梯度:", Net.first.bias.grad)

优化器

import torch.optim as optim
optimizer = optim.Adam(Net.parameters, lr=0.01)
# 梯度先清零
optimizer.zero_grad()
out = Net(input)
print(out.size())target = torch.rand((1, 1))
criterion = nn.MSELoss()
loss = criterion(out, target)
loss.backward()
# 更新参数
optimizer.step()

数据加载与预处理

daraloader是可迭代的对象,将dataset返回的每一个样本拼接成一个batch,并提供多行程加速优化和代码打乱等。程序对dataset遍历完一遍之后,对dataloader也完成了一次迭代。

import torchvision as tv
import torch as t
import torchvision.transforms as transforms
from torchvision.transforms import ToPILImage
import torch.nn as nn
import torch
import torch.nn.functional as F
from torch.autograd import Variabletransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5),(0.5, 0.5, 0.5)),])
trainset = tv.datasets.CIFAR10(root='F:/code/EDSR-PyTorch-master-png/',train=True, download=True, transform=transform)
trainloader = t.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=0
)
testset = tv.datasets.CIFAR10(root='F:/code/EDSR-PyTorch-master-png/',train=False, download=True, transform=transform)
testloader = t.utils.data.DataLoader(testset,batch_size=4,shuffle=False,num_workers=0
)

深度学习框架PyTorch:入门与实践 学习(一)相关推荐

  1. numpy pytorch 接口对应_拆书分享篇深度学习框架PyTorch入门与实践

    <<深度学习框架PyTorch入门与实践>>读书笔记 <深度学习框架PyTorch入门与实践>读后感 小作者:马苗苗  读完<<深度学习框架PyTorc ...

  2. 深度学习框架Pytorch入门与实践——读书笔记

    2 快速入门 2.1 安装和配置 pip install torch pip install torchvision#IPython魔术命令 import torch as t a=t.Tensor( ...

  3. 深度学习框架PyTorch入门与实践:第二章 快速入门

    本章主要介绍两个内容,2.1节介绍如何安装PyTorch,以及如何配置学习环境:2.2节将带领读者快速浏览PyTorch中主要内容,给读者一个关于PyTorch的大致印象. 2.1 安装与配置 2.1 ...

  4. 深度学习框架PyTorch入门与实践:第八章 AI艺术家:神经网络风格迁移

    本章我们将介绍一个酷炫的深度学习应用--风格迁移(Style Transfer).近年来,由深度学习引领的人工智能技术浪潮越来越广泛地应用到社会各个领域.这其中,手机应用Prisma,尝试为用户的照片 ...

  5. 深度学习框架PyTorch入门与实践:第七章 AI插画师:生成对抗网络

    生成对抗网络(Generative Adversarial Net,GAN)是近年来深度学习中一个十分热门的方向,卷积网络之父.深度学习元老级人物LeCun Yan就曾说过"GAN is t ...

  6. 深度学习框架PyTorch入门与实践:第九章 AI诗人:用RNN写诗

    我们先来看一首诗. 深宫有奇物,璞玉冠何有. 度岁忽如何,遐龄复何欲. 学来玉阶上,仰望金闺籍. 习协万壑间,高高万象逼. 这是一首藏头诗,每句诗的第一个字连起来就是"深度学习". ...

  7. 深度学习框架pytorch入门之张量Tensor(一)

    文章目录 一.简介 二.查看帮助文档 三.Tensor常用方法 1.概述 2.新建方法 (1)Tensor(*sizes) tensor基础构造函数 (2)ones(*sizes) 构造一个全为1的T ...

  8. 深度学习框架PyTorch一书的学习-第四章-神经网络工具箱nn

    参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 本章介绍的nn模块是构建与autogr ...

  9. 深度学习框架PyTorch一书的学习-第三章-Tensor和autograd-1-Tensor

    参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 Tensor Tensor可以是一个数 ...

  10. 好书分享——《深度学习框架PyTorch:入门与实践》

    内容简介 : <深度学习框架PyTorch:入门与实践>从多维数组Tensor开始,循序渐进地带领读者了解PyTorch各方面的基础知识.结合基础知识和前沿研究,带领读者从零开始完成几个经 ...

最新文章

  1. 学习笔记---取得枚举项的2种方法: Enum.GetValues()-Array.GetValue()和Enum.GetNames()-Enum.Parse()...
  2. 如何在窗体之间通讯的几种方法 ? VB.NET方案
  3. linux获得蓝牙外设mac,iOS获取蓝牙外设Mac地址
  4. 华为鸿蒙2.0操作页面,华为鸿蒙2.0开面界面确认,这一变化你可懂
  5. hibernate 使用别名查询
  6. base64码通过http传输 +号变 空格 以及 图片编码后字符串较长导致POST提交失败 问题解决...
  7. android学习笔记---使用AsyncTask实现异步处理,内部使用线程加Handler
  8. mysql的新特性_MySQL 8.0的关系数据库新特性详解
  9. 使用QT制作的简易计算器
  10. Android 腾讯 云通信 用户头像更新
  11. Git:真实 merge
  12. 数据库 内联左联右联 INNER JOIN、LEFT JOIN和RIGHT JOIN
  13. 企业如何建设网站之基础建站教程
  14. 基于军事专区新闻的爬虫
  15. 商米科技IPO被终止:曾拟募资10亿 蚂蚁集团与小米是股东
  16. 教你轻松通过微软正版windows验证
  17. 基于STM32的四旋翼无人机开发设计
  18. 【Linux】Linux下文件名批量编号
  19. 中国齿轮行业发展状况与投资规划建议报告2022-2028年
  20. 程序员究竟是该成为“通才”还是“专才”

热门文章

  1. 高斯—若尔当(约当)消元法解异或方程组+bitset优化模板
  2. Web前端开发工程师基本要求
  3. ajax ----进度条的原理
  4. 图文混排的几种实现方案
  5. linux mysql 密码策略_linux密码策略
  6. mybatis-generator逆向工程生成boolean字段解决办法
  7. The requested resource is not available. 原因,成功解决
  8. python 封装_Python面向对象之封装
  9. 计算机组装大赛初赛成功举办,第一届计算机组装大赛方案
  10. paypalsdk集成php,php核心paypal sdk