「@Author:Runsen」

在PyTorch建立模型,主要是NN模块。

nn.Linear

nn.Linear是创建一个线性层。这里需要将输入和输出维度作为参数传递。

linear = nn.Linear(10, 2)
example_input = torch.randn(3, 10)
example_output = linear(example_input)
example_output

上面代码linear接受nx10的输入并返回nx2的输出。

print(example_input)
print(example_output)tensor([[ 1.1122, -0.1381,  0.5547, -0.3326, -0.5676,  0.2810, -0.5521, -0.8729,-0.6627,  0.8729],[ 1.9134,  0.2397, -0.8340,  1.1532, -1.6725,  0.6171, -0.0357, -1.6848,-0.8454,  0.3876],[-0.0786, -0.1541, -0.8385, -0.1587, -0.0121,  1.4457, -0.0132,  1.5653,-1.6954, -0.9350]])
# 输出如下
tensor([[-0.1249, -0.8002],[-1.0945, -0.2297],[-0.3558,  0.8439]], grad_fn=<AddmmBackward>)

nn.Relu

nn.Relu对线性的给定输出执行 relu 激活函数操作。

relu = nn.ReLU()
relu_output = relu(example_output)
relu_output# 输出如下
tensor([[0.0000, 0.0000],[0.0000, 0.0000],[0.0000, 0.8439]], grad_fn=<ReluBackward0>)

nn.BatchNorm1d

nn.BatchNorm1d是一种标准化技术,用于在不同批次的输入中保持一致的均值和标准偏差。

batchnorm = nn.BatchNorm1d(2)
batchnorm_output = batchnorm(relu_output)
batchnorm_output# 输出如下
tensor([[ 0.0000, -0.7071],[ 0.0000, -0.7071],[ 0.0000,  1.4142]], grad_fn=<NativeBatchNormBackward>)

nn.Sequential

nn.Sequential一次性创建一系列操作。和tensorflow中的Sequential完全一样。

mlp_layer = nn.Sequential(nn.Linear(5, 2),nn.BatchNorm1d(2),nn.ReLU()
)
test_example = torch.randn(5,5) + 1
print("input: ")
print(test_example)
print("output: ")
print(mlp_layer(test_example))# 输出如下
input:
tensor([[ 1.4617,  1.2446,  1.4919,  1.5978, -0.3410],[-0.2819,  0.5567,  1.0113,  1.8053, -0.0833],[ 0.2830,  1.0857,  1.2258,  2.6602,  0.1339],[ 0.8682,  0.9344,  1.3715,  0.0279,  1.8011],[ 0.6172,  1.1414,  0.6030,  0.3876,  1.3653]])
output:
tensor([[0.0000, 0.0000],[0.0000, 1.3722],[0.0000, 0.8861],[1.0895, 0.0000],[1.3047, 0.0000]], grad_fn=<ReluBackward0>)

在上面的模型中缺少了优化器,我们无法得到对应损失。

import torch.optim as optim
adam_opt = optim.Adam(mlp_layer.parameters(), lr=1e-1)
# 这里lr表示学习率,1e-1表示0.1
train_example = torch.randn(100,5) + 1
adam_opt.zero_grad()
# 我们将使用1减去平均值,作为简单损失函数
cur_loss = torch.abs(1 - mlp_layer(train_example)).mean()
cur_loss.backward()
# 更新参数
adam_opt.step()
print(cur_loss.data)
# 输出如下
tensor(0.7467)

虽然上面只是用了一个epoch,训练线性模型得到loss为0.7467,上面就是NN模型建立model的整个流程,

第一个神经网络模型

下面实现第一个分类神经网络,其中一个隐藏层用于开发单个输出单元。

首先,使用以下命令导入 PyTorch 库 -

import torch
import torch.nn as nn

定义所有层和批量大小以开始执行神经网络,如下所示 -

n_in, n_h, n_out, batch_size = 10, 5, 1, 10

由于神经网络包括输入数据的组合以获得相应的输出数据,我们将遵循以下相同的程序 -

x = torch.randn(batch_size, n_in)
y = torch.tensor([[1.0], [0.0], [0.0],
[1.0], [1.0], [1.0], [0.0], [0.0], [1.0], [1.0]])

创建顺序模型。使用下面代码,创建一个顺序模型 -

model = nn.Sequential(nn.Linear(n_in, n_h),nn.ReLU(),nn.Linear(n_h, n_out),nn.Sigmoid())

借助梯度下降优化器构建损失函数,如下所示 -

# 构造损失函数
criterion = torch.nn.MSELoss()
# 构造优化器
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)

使用给定代码行的迭代循环实现梯度下降模型 -

# 梯度下降
for epoch in range(50):# 正向传递:通过将x传递给模型来计算预测的yy_pred = model(x)# 计算lossloss = criterion(y_pred, y)# 梯度清0optimizer.zero_grad()# 反向传播,求解梯度loss.backward()# 更新模型参数optimizer.step()if epoch % 10 == 0:print('epoch: ', epoch,' loss: ', loss.item())

输出如下

epoch:  0  loss:  0.2508794665336609
epoch:  10  loss:  0.24847669899463654
epoch:  20  loss:  0.24615907669067383
epoch:  30  loss:  0.24392127990722656
epoch:  40  loss:  0.24175791442394257

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑黄海广老师《机器学习课程》课件合集
本站qq群851320808,加入微信群请扫码:

【小白学习PyTorch教程】三、Pytorch中的NN模块并实现第一个神经网络模型相关推荐

  1. 【小白学习keras教程】五、基于reuters数据集训练不同RNN循环神经网络模型

    @Author:Runsen 文章目录 循环神经网络RNN Load Dataset 1. Vanilla RNN 2. Stacked Vanilla RNN 3. LSTM 4. Stacked ...

  2. R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

    R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型 目录 R语言基于MASS包中的shuttle数据集以及neuralnet包构建神经网络模型

  3. 【小白学习PyTorch教程】四、基于nn.Module类实现线性回归模型

    「@Author:Runsen」 上次介绍了顺序模型,但是在大多数情况下,我们基本都是以类的形式实现神经网络. 大多数情况下创建一个继承自 Pytorch 中的 nn.Module 的类,这样可以使用 ...

  4. 【小白学习tensorflow教程】二、TensorBoard可视化模型训练

    @Author:Runsen 本想在Torch和Keras更新TensorBoard,还是决定扔在了tensorflow. TensorBoard是用于可视化图形和其他工具以理解.调试和优化模型的界面 ...

  5. Python学习笔记整理(三)Python中的动态类型简介

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

  6. python安装numpy模块教程_Windows系统中安装Python模块pip numpy matplotlib

    Windows系统中安装Python模块pip numpy matplotlib ]http://blog.csdn.net/guyuealian/article/details/52767125 一 ...

  7. 微软企业库4.1学习笔记(三十六)日志模块 简介

    日志模块 企业库的日志模块简单的实现了日志功能的常用功能.开发者可以利用模块在下面的位置记录信息: 事件日志 电子邮件 数据库 消息队列 文本文件 WMI的事件查看器 自定义的位置 模块为记录在任何位 ...

  8. 【小白学习keras教程】三、Kears中常见模型层Padding、Conv2D、MaxPooling2D、Flatten和Dense

    @Author:Runsen 文章目录 基础知识 1.Padding 2. FIlter/kernels 3.Pooling 4.Flattening 5.Fully Connected (Dense ...

  9. 【小白学习tensorflow教程】四、使用 tfhub中的模型EfficientDet-Lite2 进行对象检测

    @Author:Runsen tfhub是tensorflow官方提供训练好的模型的一个仓库.今天,我使用 tfhub中的模型EfficientDet-Lite2 进行对象检测 选择的模型是Effic ...

最新文章

  1. 电子学会青少年编程等级考试案例:曲奇饼干
  2. 使用Nginx+WordPress搭建个人网站
  3. 在VS2013平台下如何快速解决c++代码内存泄漏问题
  4. vue动态生成下拉框_解决vue动态下拉菜单 有数据未反应的问题
  5. 在DC中误删除ISA计算机后无法连接ISA配置服务器问题
  6. 寻找成功人生的方向-在新东方听讲座的感悟
  7. 使用阿里云的【身份证实名认证接口】API核验用户的真实性
  8. 五猴分桃python_猴子分桃问题 | 学步园
  9. springboot 之 SpringBoot指定额外需要扫描的包
  10. buu刷题记录 [PWNHUB 公开赛 2018]傻 fufu 的工作日
  11. llvm libLLVMCore源码分析 05 - Instruction Class
  12. 天翼云桌面Linux,天翼云Linux主机如何挂载数据盘
  13. 第四课 尚硅谷Scala语言学习-面向对象
  14. 网络安全:常见攻击手段及防御
  15. 目标检测后处理:从nms到softer nms
  16. jQuery.on() 函数详解
  17. 2014 WOT全球软件技术峰会深圳站
  18. Android 12.0 第三方无源码apk授予QUERY_ALL_PACKAGES等其他权限的方法
  19. EmailAll 强大的邮箱收集工具(企业邮箱收集)
  20. homeassistant中usb摄像头的使用(usb转web摄像头)

热门文章

  1. RFS的web自动化验收测试——第12讲 List Variables-List变量及其用法
  2. (译)Objective-C的动态特性
  3. angularjs $watch
  4. .net中从GridView中导出数据到excel(详细)
  5. A watermeten 《Before an Exam》
  6. HDU 1257 最少拦截系统
  7. 请教开发WinForm时输入法问题
  8. wxpython多个面板_wxpython笔记:wxPython的布局管理实践【嵌入matplotlib、页面切换】...
  9. css 浮动在最上层_CSS的“层”峦“叠”翠
  10. python多线程的作用_Python多线程中三个函数的强大功能简介