在写代码时发现我们在定义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=…
我们在训练时如果使用了BN层和Dropout层,我们需要对model进行标识: model.train():在训练时使用BN层和Dropout层,对模型进行更改. model.eval():在评价时将BN层和Dropout层冻结,这两个操作不会对模型进行更改.…
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…
在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比较执着,想学pytorch,好,有个大神来了,把<动手学深度学习>整本书用pytorch代码重现了,其GitHub网址为:https://github.com/ShusenTang/Dive-into-DL-PyTorch   原书GitHub网址为:https://github.com/d2l-…
从 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…
先看看简单例子: import torch import torch.autograd as autograd import torch.nn as nn import torch.nn.functional as F import torch.optim as optim torch.manual_seed(1) 1 2 3 4 5 6 7 用torch.tensor让list成为tensor: # Create a 3D tensor of size 2x2x2. T_data = [[[1…
PyTorch - torch.eq.torch.ne.torch.gt.torch.lt.torch.ge.torch.le 参考:https://flyfish.blog.csdn.net/article/details/106388548…
发现 对于torch.matmul和torch.bmm,都能实现对于batch的矩阵乘法: a = torch.rand((2,3,10))b = torch.rand((2,2,10))### matmal()res1 = torch.matmul(a,b.transpose(1,2))print res1 """...[torch.FloatTensor of size 2x3x2]"""### bmm()res2 = torch.bmm(a…
作者:infiniteft链接:https://www.zhihu.com/question/66782101/answer/579393790来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 两者的相同之处: nn.Xxx和nn.functional.xxx的实际功能是相同的,即nn.Conv2d和nn.functional.conv2d 都是进行卷积,nn.Dropout 和nn.functional.dropout都是进行dropout,.....: 运行效率…
模型创建与nn.Module 网络模型创建步骤 nn.Module graph LR 模型 --> 模型创建 模型创建 --> 构建网络层 构建网络层 --> id[卷积层,池化层,激活函数层] 模型 --> 权值初始化 权值初始化 --> id1[Xavier,Kaiming,均匀分布,正太分布] 模型创建 --> 拼接网络层 拼接网络层 --> id2[LeNet,AlexNet,ResNet] LeNet Conv1 --> pool1 -->…
一.BCELoss 二分类损失函数 输入维度为(n, ), 输出维度为(n, ) 如果说要预测二分类值为1的概率,则建议用该函数! 输入比如是3维,则每一个应该是在0--1区间内(随意通常配合sigmoid函数使用),举例如下: import torchimport torch.nn as nnm = nn.Sigmoid() loss = nn.BCELoss() input = torch.randn(3,requires_grad=True) target = torch.empty(3)…
torch.rand(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) #返回从[0,1)均匀分布中抽取的一组随机数:均匀分布采样:#*sizes指定张量的形状: torch.randn(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) #返回从标…
torch.cat() 和 torch.stack()略有不同torch.cat(tensors,dim=0,out=None)→ Tensortorch.cat()对tensors沿指定维度拼接,但返回的Tensor的维数不会变,可理解为续接:torch.stack(tensors,dim=0,out=None)→ Tensortorch.stack()同样是对tensors沿指定维度拼接,但返回的Tensor会多一维,可理解为叠加:----------------版权声明:本文为CSDN博主…
定义 torch.sort(input,dim,descending) torch.argsort(input,dim,descending) 用法 torch.sort:对输入数据排序,返回两个值,即排序后的数据values和其在原矩阵中的坐标indices torch.argsort:同torch.sort()返回的indices 参数 input:输入矩阵 dim:排序维度,默认为dim=1,即对行排序 descending:排序方式(从小到大和从大到小),默认为从小到大排序(即desce…
torch.stack():http://www.45fan.com/article.php?aid=1D8JGDik5G49DE1X torch.stack()个人理解:属于先变形再cat的操作,所以在哪个维度上stack,要先把原数据变成相应维度上的值. 例如:x = [1, 2], y = [3, 4], torch.stack([x, y], dim=1) x要先变成2*1的形状,即[[1], [2]], y也一样,[[3], [4]],然后再在第一个维度上叠加,变成[[1, 3], […
学习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_(…
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行.squeeze(a)就是将a中所有为1的维度删掉.不为1的维度没有影响.a.squeeze(N) 就是去掉a中指定的维数为一的维度.还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度. 再看torch.unsque…
一直对于model.eval()和torch.no_grad()有些疑惑 之前看博客说,只用torch.no_grad()即可 但是今天查资料,发现不是这样,而是两者都用,因为两者有着不同的作用 引用stackoverflow: Use both. They do different things, and have different scopes. with torch.no_grad: disables tracking of gradients in autograd. model.ev…
squeeze的用法主要就是对数据的维度进行压缩或者解压. squeeze() torch.squeeze(a):去掉a中维数为1的维度. a.squeeze(N):去掉特定维度N下维数为1的维度. b=torch.squeeze(a,N):a中去掉指定的维数为1的维度. unsqueeze() a.unsqueeze(N):在a中指定位置N加上一个维数为1的维度. b=torch.unsqueeze(a,N):在a中指定位置N加上一个维数为1的维度.…
Linear 是module的子类,是参数化module的一种,与其名称一样,表示着一种线性变换. 创建 parent 的init函数 Linear的创建需要两个参数,inputSize 和 outputSize inputSize:输入节点数 outputSize:输出节点数 所以Linear 有7个字段: weight : Tensor , outputSize ×× inputSizebias: Tensor ,outputSizegradWeight: Tensor , outputSi…
形式: torch.max(input) → Tensor 返回输入tensor中所有元素的最大值: a = torch.randn(1, 3) >>0.4729 -0.2266 -0.2085 torch.max(a) #也可以写成a.max() >>0.4729 形式: torch.max(input, dim, keepdim=False, out=None) -> (Tensor, LongTensor) 按维度dim 返回最大值,并且返回索引. torch.max(…
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------…
tf.nn.softmax softmax是神经网络的最后一层将实数空间映射到概率空间的常用方法,公式如下: \[ softmax(x)_i=\frac{exp(x_i)}{\sum_jexp(x_j)} \] 本文意于分析tensorflow中的tf.nn.softmax(),关于softmax的具体推导和相关知识点,参照其它文章. tensorflow的tf.nn.softmax()函数实现位于这里,可以看到,实现起来相当简明: tf.exp(logits)/tf.reduce_sum(tf…
摘要:池化层的主要目的是降维,通过滤波器映射区域内取最大值.平均值等操作. 均值池化:tf.nn.avg_pool(input,ksize,strides,padding) 最大池化:tf.nn.max_pool(input,ksize,strides,padding) input:通常情况下是卷积层输出的featuremap,shape=[batch,height,width,channels]              假定这个矩阵就是卷积层输出的featuremap(2通道输出)  他的s…
https://www.bilibili.com/video/av9770302/?p=8 李宏毅深度学习 图很清楚的反映出两者的不同 Recurrent可以看成Recursive的特殊形式,即以特定方式组成的recursive…
nn.softmax 和 softmax_cross_entropy_with_logits 和 softmax_cross_entropy_with_logits_v2 的区别   You have every reason to be confused, because in supervised learning one doesn't need to backpropagate to labels. They are considered fixed ground truth and o…
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:…