torch.nn 的本质】的更多相关文章

torch.nn 的本质 PyTorch 提供了各种优雅设计的 modules 和类 torch.nn,torch.optim,Dataset 和 DataLoader 来帮助你创建并训练神经网络.为了充分利用它们的力量并且根据你的问题定制它们,你需要真正地准确了解它们在做什么.为了建立这种理解,我们首先从这些模型(models)上不使用任何特性(features)在 MNIST 数据集上训练一个基本的神经网络:我们将从最基本的 PyTorch Tensor 功能开始.然后,我们每次在 torc…
先看一下CLASS有哪些参数: torch.nn.Conv2d( in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros' ) 可以对输入的张量进行 2D 卷积. in_channels: 输入图片的 channel 数. out_channels: 输出图片的 channel 数. kernel_size: 卷积核的大小.…
从 relu 的多种实现来看 torch.nn 与 torch.nn.functional 的区别与联系 relu多种实现之间的关系 relu 函数在 pytorch 中总共有 3 次出现: torch.nn.ReLU() torch.nn.functional.relu_() torch.nn.functional.relu_() torch.relu() torch.relu_() 而这3种不同的实现其实是有固定的包装关系,由上至下是由表及里的过程. 其中最后一个实际上并不被 pytorch…
torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom Variable的一种,常被用于模块参数(module parameter). Parameters 是 Variable 的子类.Paramenters和Modules一起使用的时候会有一些特殊的属性,即:当Paramenters赋值给Module的属性的时候,他会自动的被加到 Module的 参…
参考:https://pytorch.org/docs/stable/nn.html torch.nn.init.constant_(tensor, val) 使用参数val的值填满输入tensor 参数: tensor:一个n维的torch.Tensor val:用于填满tensor的值 举例: w = torch.empty(,) nn.init.constant_(w, 0.3) 返回: tensor([[0.3000, 0.3000, 0.3000, 0.3000, 0.3000], […
https://pytorch.org/docs/stable/nn.html 1)卷积层 class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True) 二维卷积层, 输入的尺度是(N, Cin,H,W),输出尺度(N,Cout,Hout,Wout)的计算方式: 说明 stride: 控制相关系数的计算步长 dilation:…
参考:https://pytorch-cn.readthedocs.io/zh/latest/package_references/functional/#_1 class torch.nn.Softmax(input, dim) 或: torch.nn.functional.softmax(input, dim) 对n维输入张量运用Softmax函数,将张量的每个元素缩放到(0,1)区间且和为1.Softmax函数定义如下: 参数: dim:指明维度,dim=0表示按列计算:dim=1表示按行…
自然语言中的常用的构建词向量方法,将id化后的语料库,映射到低维稠密的向量空间中,pytorch 中的使用如下: import torch import torch.utils.data as Data import torch.nn as nn import torch.nn.functional as F from torch.autograd import Variable word_to_id = {'hello':0, 'world':1} embeds = nn.Embedding(…
torch.nn.utils.clip_grad_norm(parameters, max_norm, norm_type=2) 1.梯度裁剪原理(http://blog.csdn.net/qq_29340857/article/details/70574528) 既然在BP过程中会产生梯度消失/爆炸(就是偏导无限接近0,导致长时记忆无法更新),那么最简单粗暴的方法,设定阈值,当梯度小于/大于阈值时,更新的梯度为阈值,如下图所示: 优点:简单粗暴 缺点:很难找到满意的阈值 2.nn.utils.…
class torch.nn.CrossEntropyLoss(weight=None, size_average=True, ignore_index=-100, reduce=True) 我这里没有详细解读这个损失函数的各个参数,仅记录一下在sru中涉及到的. sru中代码如下 criterion = nn.CrossEntropyLoss(size_average=False) 根据pytorch的官方文档 我得出的理解跟以上图片是一致的,图片来源:http://blog.csdn.net…
主要是参考这里,写的很好PyTorch 入门实战(四)--利用Torch.nn构建卷积神经网络 卷积层nn.Con2d() 常用参数 in_channels:输入通道数 out_channels:输出通道数 kernel_size:滤波器(卷积核)大小,宽和高相等的卷积核可以用一个数字表示,例如kernel_size=3;否则用不同数字表示,例如kernel_size=(5,3) stride : 表示滤波器滑动的步长 padding:是否进行零填充,padding=0表示四周不进行零填充,pa…
Pytorch官网的解释是:一个保存了固定字典和大小的简单查找表.这个模块常用来保存词嵌入和用下标检索它们.模块的输入是一个下标的列表,输出是对应的词嵌入. torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False) 个人理解:这是一个矩阵类,里面初始化了一个随机矩阵,矩阵的长是字典的大…
import torch x = torch.randn(128, 20) # 输入的维度是(128,20)m = torch.nn.Linear(20, 30) # 20,30是指维度output = m(x)print('m.weight.shape:\n ', m.weight.shape)print('m.bias.shape:\n', m.bias.shape)print('output.shape:\n', output.shape) # ans = torch.mm(input,t…
PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx 在写 PyTorch 代码时,我们会发现一些功能重复的操作,比如卷积.激活.池化等操作.这些操作分别可以通过 torch.nn.xxx 和 torch.nn.functional.xxx 来实现. 首先可以观察源码: eg:torch.nn.Conv2d CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, p…
torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type=2) 1.(引用:[深度学习]RNN中梯度消失的解决方案(LSTM) ) 梯度裁剪原理:既然在BP过程中会产生梯度消失(就是偏导无限接近0,导致长时记忆无法更新),那么最简单粗暴的方法,设定阈值,当梯度小于阈值时,更新的梯度为阈值,如下图所示: P.S.在原博中,评论中有提到,常用的梯度裁剪的方法是限制上限,针对梯度爆炸不收敛的情况,和作者写的相反.我理解的大概是“梯度裁…
interpolate torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None) 根据给定的size或scale_factor参数来对输入进行下/上采样 使用的插值算法取决于参数mode的设置 支持目前的temporal(1D, 如向量数据), spatial(2D, 如jpg.png等图像数据)和volumetric(3D, 如点云数据)类型的…
Vision layers 1)Upsample CLASS torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None) 上采样一个给定的多通道的 1D (temporal,如向量数据), 2D (spatial,如jpg.png等图像数据) or 3D (volumetric,如点云数据)数据 假设输入数据的格式为minibatch x channels x [optional dept…
1. torch.nn与torch.nn.functional之间的区别和联系 https://blog.csdn.net/GZHermit/article/details/78730856 nn和nn.functional之间的差别如下,我们以conv2d的定义为例 torch.nn.Conv2d import torch.nn.functional as F class Conv2d(_ConvNd): def __init__(self, in_channels, out_channels…
123456789101112lstm=nn.LSTM(input_size,                     hidden_size,                      num_layers)x                         seq_len,                          batch,                              input_sizeh0            num_layers× \times×num_di…
在刷官方Tutorial的时候发现了一个用法self.v = torch.nn.Parameter(torch.FloatTensor(hidden_size)),看了官方教程里面的解释也是云里雾里,于是在栈溢网看到了一篇解释,并做了几个实验才算完全理解了这个函数.首先可以把这个函数理解为类型转换函数,将一个不可训练的类型Tensor转换成可以训练的类型parameter并将这个parameter绑定到这个module里面(net.parameter()中就有这个绑定的parameter,所以在…
在写代码时发现我们在定义Model时,有两种定义方法: torch.nn.Conv2d()和torch.nn.functional.conv2d() 那么这两种方法到底有什么区别呢,我们通过下述代码看出差别,先拿torch.nn.Conv2d torch.nn.Conv2d class Conv2d(_ConvNd): def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=…
来自: https://pytorch.org/tutorials/beginner/nn_tutorial.html <What is torch.nn really?>这文章看起来不能再流畅了,看完就能了解pytorch的究竟. by Jeremy Howard, fast.ai. Thanks to Rachel Thomas and Francisco Ingham. 推荐入门pytorch必看.…
API 输入:[ batch_size, channels, height_1, width_1 ] Conv2d输入参数:[ channels, output, height_2, width_2 ] 输出:[ batch_size,output, height_3, width_3 ] 实例: def torch_practice(): x = torch.randn(2,1,16,4) conv = torch.nn.Conv2d(1, 32, (2,2)) res = conv(x) p…
关于该类: torch.nn.Linear(in_features, out_features, bias=True) 可以对输入数据进行线性变换: $y  = x A^T + b$ in_features: 输入数据的大小. out_features: 输出数据的大小. bias: 是否添加一个可学习的 bias,即上式中的 $b$. 该线性变换,只对输入的 tensor 的最后一维进行: 例如我们有一个Linear层如下: m = nn.Linear(20, 30) 示例1: input =…
学习pytorch路程之动手学深度学习-3.4-3.7 置信度.置信区间参考:https://cloud.tencent.com/developer/news/452418 本人感觉还是挺好理解的 交叉熵参考博客:https://www.cnblogs.com/kyrieng/p/8694705.html   https://blog.csdn.net/tsyccnh/article/details/79163834  个人感觉还不错,好理解 (这段瞅瞅就行了)torchvision包,服务于P…
模型训练的三要素:数据处理.损失函数.优化算法    数据处理(模块torch.utils.data) 从线性回归的的简洁实现-初始化模型参数(模块torch.nn.init)开始 from torch.nn import init # pytorch的init模块提供了多中参数初始化方法 init.normal_(net[0].weight, mean=0, std=0.01) #初始化net[0].weight的期望为0,标准差为0.01的正态分布tensor init.constant_(…
我学习pytorch框架不是从框架开始,从代码中看不懂的pytorch代码开始的 可能由于是小白的原因,个人不喜欢一些一下子粘贴老多行代码的博主或者一些弄了一堆概念,导致我更迷惑还增加了畏惧的情绪(个人感觉哈),我觉得好像好多人都是喜欢给说的明明白白的,难听点就是嚼碎了喂我们.这样也行啊(有点恶心哈),但是有些东西即使嚼碎了我们也弄不明白,毕竟有一些知识是很难的(嚼碎后的知识我们都难以理解) 我知道了这些,也在尽力写博客时写的容易理解,但是自身实力有限,还做不到写博客写的既有条理又容易理解,请谅…
Learn From: Pytroch 官方Tutorials Pytorch 官方文档 环境:python3.6 CUDA10 pytorch1.3 vscode+jupyter扩展 #%% #%% # 1.Loading and normalizing CIFAR10 import torch import torchvision import torchvision.transforms as transforms batch_size = 16 transform = transform…
主角torch.nn.LSTM() 初始化时要传入的参数 | Args: | input_size: The number of expected features in the input `x` | hidden_size: The number of features in the hidden state `h` | num_layers: Number of recurrent layers. E.g., setting ``num_layers=2`` | would mean st…
该教程是在notebook上运行的,而不是脚本,下载notebook文件. PyTorch提供了设计优雅的模块和类:torch.nn, torch.optim, Dataset, DataLoader,以创建和训练神经完了过.为了充分利用其功能,并根据问题进行自定义,需要充分理解它们做的是什么.为了提高认知,我们首先在MNIST上训练一个基础的神经网络,而不使用这些模块的任何特性:仅使用最基础的PyTorch tensor函数初始化.然后,一次添加一个来自torch.nn, torch.opti…