计算图和autograd是十分强大的工具,可以定义复杂的操作并自动求导;然而对于大规模的网络,autograd太过于底层。

在构建神经网络时,我们经常考虑将计算安排成,其中一些具有可学习的参数,它们将在学习过程中进行优化。

TensorFlow里,有类似KerasTensorFlow-SlimTFLearn这种封装了底层计算图的高度抽象的接口,这使得构建网络十分方便。

在PyTorch中,包nn完成了同样的功能。nn包中定义一组大致等价于层的模块。一个模块接受输入的tesnor,计算输出的tensor,而且还保存了一些内部状态比如需要学习的tensor的参数等。nn包中也定义了一组损失函数(loss functions),用来训练神经网络。同时nn包中不光有一些激活函数和层操作外,还包含常见的损失函数。

代码如下:

import torch

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

N, D_in, H, D_out = 64, 1000, 100, 10

#随机生成输入和输出

x = torch.randn(N, D_in, device=device)
y = torch.randn(N, D_out, device=device) # 使用nn包将我们的模型定义为一系列的层。
# nn.Sequential是包含其他模块的模块,并按顺序应用这些模块来产生其输出。
# 每个线性模块使用线性函数从输入计算输出,并保存其内部的权重和偏差张量。
# 在构造模型之后,我们使用.to()方法将其移动到所需的设备。 model = torch.nn.Sequential(
torch.nn.Linear(D_in,H),
torch.nn.ReLU(),
torch.nn.Linear(H, D_out),
).to(device) '''
nn包中还有常用的损失函数的定义
MSELoss()中参数reducetion 初始为'mean',为均值,我们使用的是'sum'为和
但是在实践中,通过设置reduction='elementwise_mean'来使用均方误差作为损失更为常见
'''
loss_fn = torch.nn.MSELoss(reduction='elementwise_mean') learning_rate = 1e-4 for t in range(500): '''
该操作为前向传播,通过向模型中传入x,进而得到输出y
同时该模块有__call__属性可以像调用函数一样调用他们
这样我们输入张量x,得到了输出张量y_pred
'''
y_pred = model(x)
loss = loss_fn(y_pred,y)
print(t,loss.item()) #运算之前清除梯度
model.zero_grad() '''
反向传播:计算模型的损失值对模型中可训练参数的梯度
每个参数是否可训练取决于require_grad的布尔值
所以此操作可以计算所有可训练参数的梯度
'''
loss.backward() #使用梯度下降进行更新
#利用for循环取出model中的parameters()
#在对param.data进行操作
with torch.no_grad():
for param in model.parameters():
param.data -= learning_rate * param.grad

Pytorch 初次使用nn包的更多相关文章

  1. PyTorch 中,nn 与 nn.functional 有什么区别?

    作者:infiniteft链接:https://www.zhihu.com/question/66782101/answer/579393790来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  2. pytorch中torch.nn构建神经网络的不同层的含义

    主要是参考这里,写的很好PyTorch 入门实战(四)--利用Torch.nn构建卷积神经网络 卷积层nn.Con2d() 常用参数 in_channels:输入通道数 out_channels:输出 ...

  3. [pytorch笔记] torch.nn vs torch.nn.functional; model.eval() vs torch.no_grad(); nn.Sequential() vs nn.moduleList

    1. torch.nn与torch.nn.functional之间的区别和联系 https://blog.csdn.net/GZHermit/article/details/78730856 nn和n ...

  4. pytorch中的nn.CrossEntropyLoss()

    nn.CrossEntropyLoss()这个损失函数和我们普通说的交叉熵还是有些区别 x是模型生成的结果,class是对应的label 具体代码可参见如下 import torch import t ...

  5. Pytorch并行计算:nn.parallel.replicate, scatter, gather, parallel_apply

    import torch import torch.nn as nn import ipdb class DataParallelModel(nn.Module): def __init__(self ...

  6. pytorch函数之nn.Linear

    class torch.nn.Linear(in_features,out_features,bias = True )[来源] 对传入数据应用线性变换:y = A x+ b 参数: in_featu ...

  7. pytorch 损失函数(nn.BCELoss 和 nn.CrossEntropyLoss)(思考多标签分类问题)

    一.BCELoss 二分类损失函数 输入维度为(n, ), 输出维度为(n, ) 如果说要预测二分类值为1的概率,则建议用该函数! 输入比如是3维,则每一个应该是在0--1区间内(随意通常配合sigm ...

  8. 深度学习之PyTorch实战(2)——神经网络模型搭建和参数优化

    上一篇博客先搭建了基础环境,并熟悉了基础知识,本节基于此,再进行深一步的学习. 接下来看看如何基于PyTorch深度学习框架用简单快捷的方式搭建出复杂的神经网络模型,同时让模型参数的优化方法趋于高效. ...

  9. [PyTorch入门]之从示例中学习PyTorch

    Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...

随机推荐

  1. nginx 配置Tp5项目时出现 404 Not Found nginx

    1.首先看了nginx报错日志 报 signal process started signal process started表示还有 产生原因 1.可能你的nginx.conf 内容配置的有问题. ...

  2. 【JavaWeb】Spring入门——HelloWorld

    0.为什么要使用Spring https://www.cnblogs.com/zmmi/p/7922186.html 1. 下载jar包 https://blog.csdn.net/qq_435401 ...

  3. Codeforces Round #575 (Div. 3) 题解

    比赛链接:https://codeforc.es/contest/1196 A. Three Piles of Candies 题意:两个人分三堆糖果,两个人先各拿一堆,然后剩下一堆随意分配,使两个人 ...

  4. 「JSOI2013」游戏中的学问

    「JSOI2013」游戏中的学问 传送门 考虑 \(\text{DP}\) 设 \(dp_{i, j}\) 表示将前 \(i\) 个人分成 \(j\) 个集合,并且第 \(i\) 个人在第 \(j\) ...

  5. svn服务器IP/URL地址更换,修改本地的仓库地址

    TortoiseSVN服务器ip地址修改后如何使用_windows和linux下svn切换新仓库地址的方法 windows下svn切换仓库地址 右键项目文件夹 TortoiseSVN => Re ...

  6. Kafka .net 开发入门

    Kafka安装 首先我们需要在windows服务器上安装kafka以及zookeeper,有关zookeeper的介绍将会在后续进行讲解. 在网上可以找到相应的安装方式,我采用的是腾讯云服务器,借鉴的 ...

  7. spark实验(二)--eclipse安装scala环境(2)

    此次在eclipse中的安装参考这篇博客https://blog.csdn.net/lzxlfly/article/details/80728772 Help->Eclipse Marketpl ...

  8. CSS样式的优先级(权重)

    当使用不同的选择器选中同一个元素并设置相同样式时,这时样式间产生了冲突 最终采用的是哪个选择器? 由选择器的优先级(权重)决定,权重高的优先显示 优先级规则(多个按位置分别进行计算,不进位): 内联样 ...

  9. 解决chrome记住账号默认样式覆盖

    当谷歌游览器记住账号后,输入框的颜色会变为黄色,最直接的方法:加入以下代码 input:-webkit-autofill , textarea:-webkit-autofill, select:-we ...

  10. Vue——路由回退至指定页面

    先来引出一下遇到的问题:在做一个移动端支付页面,在付款页面点击支付按钮,支付失败时跳转至支付失败提示页面:支付成功时跳转至支付成功页面.在支付成功页面下,如果用户点击手机自带的“返回”键,就又会跳转至 ...