从 pytorch到nlp

第一章 pytorch 之构建神经网络


文章目录

  • 从 pytorch到nlp
    • 前言
  • 一、构建神经网络的具体流程
  • 二、代码及其解读
    • 1.模型构建
    • 2.查看模型参数
    • 3.损失函数
    • 4.反向传播
    • 5.更新网络参数
  • 总结

前言

 作为人工智能的一项重要分支,自然语言处理在各个领域得到了广泛应用,pytorch是学习自然语言处理的一个深度学习框架之一,本文记录一下小杜的学习笔记

一、构建神经网络的具体流程

1 定义一个拥有可学习参数的神经网络
2 遍历训练数据集
3 处理数据使其流经神经网络
4计算损失
5将网络参数的梯度进行反向传播
6依一定的规则更新网络权重

二、代码及其解读

1.模型构建

代码是在jupyter notebook 上运行
图解

代码如下(示例):

import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):#定义Net的初始化函数,这个函数定义了该神经网络的基本结构def __init__(self):super(Net,self).__init__()#对继承自父类的属性进行初始化 复制并使用Net的父类的初始化方法,即先运行nn.Module的初始化函数self.conv1=nn.Conv2d(1,6,3)#输入1 输出6 卷积核是3*3 表示提取6个特征,得到6个feature mapself.conv2=nn.Conv2d(6,16,3)#输入6输出16#全连接层定义了三层线性转换,16*6*6就是把这16个二维数组拍扁了后一维向量的sizeself.fc1=nn.Linear(16*6*6,120)self.fc2=nn.Linear(120,84)self.fc3=nn.Linear(84,10)#Linear有三个参数,分别是输入特征数,输出特征数以及是否使用偏置(默认为True)。#默认情况下Linear会自动生成权重参数和偏置,所以在模型中不需要单独定义权重参数,#并且Linear提供比原先自定义权重参数时使用的randn随机正太分布更好的参数初始化方法def forward(self,x):x=F.max_pool2d(F.relu(self.conv1(x)),(2,2))#将x放入卷积层中 用激活函数relu激活  在2*2池化窗口进行最大池化x=F.max_pool2d(F.relu(self.conv2(x)),2)#经历第二个卷积层x=x.view(-1,self.num_flat_features(x))#通过这个view()函数我们把二维数据变成了一维向量。 Convolution Layer和Fully Connected Layer的对接x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))x = self.fc3(x)return xdef num_flat_features(self,x)##使用num_flat_features函数计算张量x的总特征量size=x.size[1:]num_features=1for s in size:num_features*=s #累乘return num_features
net=Net()
net

运行结果

这里显示了实例化类 打印出来网络结构
这里我们的神经网络有五层 两个卷积层 三个全连接层

2.查看模型参数

params = list(net.parameters())
print(len(params))
params[0].size()#打印第一个参数的大小
params


假设输入图像维度是3232 输出参数是十个参数 大小110
然后就可以

3.损失函数

损失函数可以通过 输入(input,target)和标签的差值进行计算
torch.nn 中有很多损失函数 比如 nn.MSEloss 计算均方误差损失评估模型
代码如下(示例):

output = net(input)
target = torch.randn(10)
target = target.view(1, -1)  #改变target张量和output匹配
criterion = nn.MSELoss()loss = criterion(output, target)
print(loss)


计算流程图 input ->conv2d->relu-> maxpool2d ->conv2d->relu->relumaxpool2d->view->linear->relu->linear->relu->linear->MSEloss->loss
反向传播 从有右向左
调用loss.backward()时,在整个计算图都会多loss进行微分,所有requires_grad=True的tensor张量的.都会累加到grad属性中。
不断追溯

4.反向传播

有了输出张量 就可以 进行梯度归零(net.zero_grad()将其所有参数(包括子模块的参数)的梯度设置为零调用backward()函数之前都要将梯度清零,因为如果梯度不清零,pytorch中会将上次计算的梯度和本次计算的梯度累加。)
反向传播net.zero_grad() out.backward(torch.randn(1,10))
调用 loss.backward() ,观察conv1 层bias的梯度反向传播前后的变化

net.zero_grad()     # 梯度归零print('conv1.bias.grad before backward')
print(net.conv1.bias.grad)loss.backward()print('conv1.bias.grad after backward')
print(net.conv1.bias.grad)

5.更新网络参数

随即梯度下降SGD
 weight = weight - learning_rate * gradient

import torch.optim as optim#创建优化器
optimizer = optim.SGD(net.parameters(), lr=0.01)# 清零
optimizer.zero_grad()   # zero the gradient buffers
#input 输入
output = net(input)
loss = criterion(output, target)
loss.backward()#对损失进行反向传播
optimizer.step()    # 真正的执行

总结

以上就是今天要讲的内容
我们学习了构建一个神经网络的典型流程
1.学习了损失函数的定义
采用torch.nn.MSEloss均方误差
通过loss.backward()进行反向传播时整张计算图将对loss进行自动求导所有属性require_grad=Ture 的Tensor将被参与到梯度求导运算中梯度累加到tensor属性。grad中
2. 学习了反向传播的计算方法
loss.backward()
进行梯度归零(net.zero_grad()将其所有参数(包括子模块的参数)的梯 度设置为零调用backward()函数之前都要将梯度清零,因为如果梯度不清零,pytorch中会将上次计算的梯度和本次计算的梯度累加。
net.zero_grad()
out.backward()
3. 学习了参数的更新方法
定义优化器来执行参数的优化更行
optimizer = optim.SGD(net.parameters(), lr=0.01)
4.通过优化器来执行具体的参数更新
optimizer.step() # 真正的执行

pytorch入门——构建神经网络相关推荐

  1. pytorch神经网络因素预测_实战:使用PyTorch构建神经网络进行房价预测

    微信公号:ilulaoshi / 个人网站:lulaoshi.info 本文将学习一下如何使用PyTorch创建一个前馈神经网络(或者叫做多层感知机,Multiple-Layer Perceptron ...

  2. PyTorch 入门实战(四)——利用Torch.nn构建卷积神经网络

    承接上一篇:PyTorch 入门实战(三)--Dataset和DataLoader PyTorch入门实战 1.博客:PyTorch 入门实战(一)--Tensor 2.博客:PyTorch 入门实战 ...

  3. 使用PyTorch构建神经网络(详细步骤讲解+注释版) 01-建立分类器类

    文章目录 1 数据准备 2 数据预览 3 简单神经网络创建 3.1 设计网络结构 3.2 损失函数相关设置 3.3 向网络传递信息 3.4 定义训练函数train 4 函数汇总 1 数据准备 神经网络 ...

  4. Pytorch入门练习2-kaggle手写字识别神经网络(CNN)实现

    目录 数据预处理 自定义数据集 构建网络结构 对卷积神经网络进行训练和评估 对数据进行预测 保存预测数据,提交代码 SNN由于无法考虑到图片数据的维度关系,在预测精度上会被限制,本章我们采用CNN卷积 ...

  5. PyTorch如何构建和实验神经网络

    点击上方"视学算法",马上关注 真爱,请设置"星标"或点个"在看" 作者 | Tirthajyoti Sarkar 来源 | Medium ...

  6. 使用PyTorch从零开始构建Elman循环神经网络

    摘要: 循环神经网络是如何工作的?如何构建一个Elman循环神经网络?在这里,教你手把手创建一个Elman循环神经网络进行简单的序列预测. 本文以最简单的RNNs模型为例:Elman循环神经网络,讲述 ...

  7. 【深度学习】:《PyTorch入门到项目实战》(十二)卷积神经网络:填充(padding)和步幅(stride)

    [深度学习]:<PyTorch入门到项目实战>(十二)填充(padding)和步幅(stride) ✨本文收录于[深度学习]:<PyTorch入门到项目实战>专栏,此专栏主要记 ...

  8. PyTorch 入门实战

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36556893/article/ ...

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

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

  10. PyTorch搭建简单神经网络实现回归和分类

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 安装 PyTorch 会安装两个模块,一个是torch,一个 torchvision, tor ...

最新文章

  1. TinyMCE的使用-安装
  2. python 中文字转拼音
  3. Jenkins+PowerShell持续集成环境搭建(二)控制台项目
  4. MyEclipse搭建java Web项目开发环境
  5. C++基础学习笔记001
  6. 使用 RequireJS 优化 Web 应用前端
  7. C语言学习,关于fflush 和setvbuf
  8. halcon 将数据保存到excel_pandas筛选、合并、批量保存excel数据
  9. 自制hdmi线一头改vga图_东莞VGA数据线厂商价格
  10. 【Excle数据透视表】如何为数据透视表应用样式
  11. 利用 Python 写个七夕表白神器
  12. 联想y7000p怎么连接显示器_惠普暗影精灵6和联想拯救者y7000p 2020款如何选?这里详细对比...
  13. Spring中的WebAppRootListener
  14. python+pytest单元测试框架之在Jenkins上生成Allure测试报告
  15. Tomcat+MySql+jdbc
  16. 微分: 全微分定义、偏导数、梯度
  17. 自己DIY一个pinephone——debian与主线linux在红米2(msm8916)上的移植
  18. 全民枪王服务器正在维护,《全民枪王》游戏黑屏怎么办? 游戏进不去解决方法...
  19. android 虚拟按键挡住布局,Android 虚拟按键遮住了页面内容解决办法
  20. Visual Studio 2017 企业版密匙

热门文章

  1. 税控接口 - 模拟录入
  2. Greensock平台
  3. Java后端学习路线图,你真的只需要这一张
  4. 基于Python实现的遗传算法求TSP问题
  5. 《现代操作系统(中文第三版)》课后习题——第二章 进程与线程
  6. LeetCode 08.04 幂集
  7. SMA2.92高频连接器的主要特点​
  8. 计算机职称专业分类明细,职称分类一览表
  9. .so文件的基本理解,使用。
  10. mac系统的UTF-8 BOM编码