我的编程空间,编程开发者的网络收藏夹
学习永远不晚

pytorch教程之网络的构建流程笔记

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

pytorch教程之网络的构建流程笔记

参考网址

构建网络

我们可以通过torch.nn包来构建网络,现在你已经看过了autograd,nn在autograd的基础上定义模型和求微分。一个nn.Module包括很多层,forward方法返回output。

一个典型的训练过程包括这么几步:
1.定义一个网络结构包含一些可训练的额参数
2.为数据集制定输入iterata
3.通过网络计算Output
4.计算loss
5.反向传播计算梯度
6.更新权值


weight = weight - learning_rate * gradient

定义一个网络

让我们来定义一个网络


import torch
import torch as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__(
        #1 input image channel ,6output image channel ,5*5convolytion kernel
        self.conv1 = nn.Conv2d(1,6,5)
        self.conv2 = nn.Conv2d(6,16,5)
        # an affine operation:y = Wx+b
        self.fc1 = nn.Linear(16*5*5,120)
        self.fc2 = nn.Linear(120,84)
        self.fc3 = nn.Linear(84,10)
    def forward(self,x):
        #max pooling
        x.F.max_pool2d(F.relu(self.conv1(x)),(2,2))
        #2   =    (2,2)
        x.F.max_pool2d(F.relu(self.con2(x)),2)
        x = x.view(-1,self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return  x
    def num_flat_features(self,x):
        size = x.size()[1:]
        num_feature = 1
        for s in size:
            num_features *=s
        return num_features

net = Net()
print(net)      

out


Net(
  (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
  (fc1): Linear(in_features=400, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

我们只需定义forward和backward函数,会自动求导通过你定义的函数,你可以使用所有的Tensor操作在forward函数中。
我们使用net.parameters()函数返回可学习的参数


params = list(net.parameters())
print(len(params))
print(params[0].size())  # conv1's .weight

out


10
torch.Size([6, 1, 5, 5])

让我们试试32*32的输入节点,因为lenet网络的输入应该是32*32,为了在MNIST数据集上使用lenet我们需要将图片reshpe成32*32


input = torch.randn(1,1,32,32)
oyt = net(input)
print(out)

out


tensor([[-0.1346,  0.0581, -0.0396, -0.1136, -0.1128,  0.0180, -0.1226,
         -0.0419, -0.1150,  0.0278]])

零化导数buffers所有的参数都会随机求导


net.zero_grad()
out.backward(torch.randn(1,10))

torch.nn只支持mini-batch,而不是单个的样本
例如,nn.Conv2d输入是一个4维tensors


nSamples * nChannels * Height * Width

如果你只有单个的样本,使用input.unsqueeze(0)增加一个假的batch维度
在后处理之前,让我们看看都学过什么类

Recap:

torch.Tensor - A multi-dimensional array with support for autograd operations like backward(). Also holds the gradient w.r.t. the tensor.
nn.Module - Neural network module. Convenient way of encapsulating parameters, with helpers for moving them to GPU, exporting, loading, etc.
nn.Parameter - A kind of Tensor, that is automatically registered as a parameter when assigned as an attribute to a Module.
autograd.Function - Implements forward and backward definitions of an autograd operation. Every Tensor operation, creates at least a single Function node, that connects to functions that created a Tensor and encodes its history.

目前,我们学习了:
1.定义一个神经网络
2.处理输入和使用后向传播
我们还需要学习:
1.计算loss
2.更新权值

loss Function

Loss function接受(output traget)对作为输入,计算一个反映到目标距离的值。
在nn这个包里面有很多loss function ,最简单的是nn.MSELoss,就是那输入与输出的均方误差。

举个例子


output = net(input)
target = torch.arrange(1,11)
target = target.view(1m-1)
criterion = nn.MSELoss()
loss = criterion(output,target)
print(loss)

Out:


tensor(39.1076)

Backprop

为了反向传播我们需要做的仅仅是进行loss.backward(),我们需要清除现有的梯度

更新权值

最简单常用的更新权值的方法就是SGD(Stochastic Gradient Descent )


weight = weight - learning_rata * gradiernt

我们可以通过简单的代码实现上面的公式:


learning_rata = 0.01
for f in net.parameters():
    f.data.sib_(f.grad.data *  learining_rata)

但是我们也可以使用不同的更新规则,像是 SGD, Nesterov-SGD, Adam, RMSProp, etc.
为了使用这些,我们需要torch.optim包,使用起来也很简单。


import torch.optim as optim 
#creat you optimizer
optimizer = optim.SGD(net.parameters(),lr = 0.01)
#in your training loop:
optimizer.zero_grad()
output = net(input)
loss = criterion(output,target)
loss.backward()
optimizer.step()

注意gradient必须清零
现在我们调用loss.backward(),并且看看con1的bias的前后差别


ner.zero_grad()
print('conv1.bias.grad before backward')
loss.backward()
print('conv1.bias.grad after backward')
piint(net.conv1.bias.grad)

out


conv1.bias.grad before backward
tensor([ 0.,  0.,  0.,  0.,  0.,  0.])
conv1.bias.grad after backward
tensor([ 0.1178, -0.0404, -0.0810,  0.0363, -0.0631,  0.1423])

现在,我们看到了如何使用loss function
重要
torch包含很多的loss function和其他包,其余的文档可以看这里
http://pytorch.org/docs/nn

以上就是pytorch教程之网络的构建流程笔记的详细内容,更多关于pytorch教程的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

pytorch教程之网络的构建流程笔记

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

NodeJS学习笔记之网络编程

Node提供丰富的网络编程模块Node模块协议netTCPdgramUDPhttpHTTPhttpsHTTPSTCP服务事件分为下面两类 (1)、服务器事件 对于通过net.createServer()创建的服务器而言,它是一个EventE
2022-06-04

H3C SE 教程笔记——构建H3C高性

第5篇    IP组播第18章    IP组播概述    IP组播技术实现了数据在IP网络中点到多点的高效传送,能够节约大量网络带宽、降低网络负载。通过IP组播技术可以方便地在IP网络之上提供一些增值业务,包括在线直播、网络电视、远程教育、
2023-01-31

Android开发笔记之Fragment的使用教程

我们的Android入门一步步已经进入中级,我们讲完了所有的基本组件的基本使用、Activity、Service、BroadCast,今天我们来介绍一下Fragment的使用教程,需要的朋友可以参考下
2023-05-19

win7笔记本wifi共享网络设置教程(供手机上网)

搜索“wifi宝”工具软件,进入官网下载工具软件,建议下最新版,新版修复了软件的部分bug。安装wifi宝软件,建议安装到D盘或其他盘,默认C盘,如图安装完后,启动wifi宝,共享笔记本网络,这里我们创建一个名叫AF
2023-05-29

Java网络编程教程之设置请求超时的方法

一、引言随着企业系统的发展,应用多采用分布式结构,严重依赖于网络的稳定性。但由于网络天生的不稳定性,系统开发过程中需要考虑网络不稳定情况下如何保证应用的鲁棒性。 设置网络超时是其中一种保证应用健壮性的手段。 设置网络超时设置后,请求在设定时
2023-05-30

Python 字典在网络编程中的应用:构建高效网络服务

Python 字典是在网络编程中被广泛使用的的数据结构,它具有键值对的特性,能够快速、高效地存储和检索数据。本文将介绍 Python 字典在网络编程中的应用,并通过演示代码展示如何使用字典构建高效的网络服务。
Python 字典在网络编程中的应用:构建高效网络服务
2024-02-22

Win8建立WiFi的方法 Win8笔记本wifi共享视频教程

最近有不少网友将系统升级到了最新的Win8系统,但随着而来也带来不少问题,比如Win8怎么建立WiFi共享呢?之前在使用Win7系统的时候我们可以借助诸如Wifi共享精灵软件一键设置即可,然而目前很多此类型软件暂时还不支持Win8系统,那么
2022-06-04

建立云服务器网络链接的设置方法教程

1.选择云服务提供商在建立云服务器网络链接之前,首先需要选择一个可靠的云服务提供商。常见的云服务提供商包括亚马逊AWS、微软Azure和谷歌云平台等。根据你的需求和预算,选择一个适合的云服务提供商。2.创建云服务器实例在选择了云服务提供商后,你需要创建一个云服务器实例。这可以通过云服务提供商的控制台或命令行工具来完成。
2023-10-27

Golang网络编程:构建强大的服务器和客户端应用

go 网络编程简介网络编程基础:了解客户端-服务器模型、tcp/ip 协议栈和常见网络编程库。构建网络服务器:使用 net/http 包创建 http 服务器,处理客户端请求并生成响应。构建网络客户端:使用 net/http 包创建 htt
Golang网络编程:构建强大的服务器和客户端应用
2024-05-12

阿里云服务器VPS教程如何搭建高效稳定的网络环境

本文将会介绍如何利用阿里云服务器VPS搭建一个高效稳定的网络环境,包括购买服务器、安装操作系统、配置网络环境和安全设置等步骤。一、购买阿里云服务器1.登录阿里云官方网站,选择相应的服务器类型,如云服务器ECS。2.在服务器规格页面选择合适的服务器配置,根据自己的需求选择合适的服务器类型。3.选择服务器地域和可用区
阿里云服务器VPS教程如何搭建高效稳定的网络环境
2023-11-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录