pytorch 中nn.Dropout的使用说明

看代码吧~

Class USeDropout(nn.Module):

    def __init__(self):
        super(DropoutFC, self).__init__()
        self.fc = nn.Linear(100,20)
        self.dropout = nn.Dropout(p=0.5)
    def forward(self, input):
        out = self.fc(input)
        out = self.dropout(out)
        return out
Net = USeDropout()
Net.train()

示例代码如上,直接调用nn.Dropout即可,但是注意在调用时要将模型参数传入。

补充:Pytorch的nn.Dropout运行稳定性测试

结论:

Pytorch的nn.Dropout在每次被调用时dropout掉的参数都不一样,即使是同一次forward也不同。

如果模型里多次使用的dropout的dropout rate大小相同,用同一个dropout层即可。

如代码所示:

import torch
import torch.nn as nn
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.dropout_1 = nn.Dropout(0.5)
        self.dropout_2 = nn.Dropout(0.5)
    def forward(self, input):
        # print(input)
        drop_1 = self.dropout_1(input)
        print(drop_1)
        drop_1 = self.dropout_1(input)
        print(drop_1)
        drop_2 = self.dropout_2(input)
        print(drop_2)
if __name__ == '__main__':
    i = torch.rand((5, 5))
    m = MyModel()
    m.forward(i)

结果如下:

*\python.exe */model.py
tensor([[0.0000, 0.0914, 0.0000, 1.4095, 0.0000],
[0.0000, 0.0000, 0.1726, 1.3800, 0.0000],
[1.7651, 0.0000, 0.0000, 0.9421, 1.5603],
[1.0510, 1.7290, 0.0000, 0.0000, 0.8565],
[0.0000, 0.0000, 0.0000, 0.0000, 0.0000]])
tensor([[0.0000, 0.0000, 0.4722, 1.4095, 0.0000],
[0.0416, 0.0000, 0.1726, 1.3800, 1.3193],
[0.0000, 0.3401, 0.6550, 0.0000, 0.0000],
[1.0510, 1.7290, 1.5515, 0.0000, 0.0000],
[0.6388, 0.0000, 0.0000, 1.0122, 0.0000]])
tensor([[0.0000, 0.0000, 0.4722, 0.0000, 1.2689],
[0.0416, 0.0000, 0.0000, 1.3800, 0.0000],
[0.0000, 0.0000, 0.6550, 0.0000, 1.5603],
[0.0000, 0.0000, 1.5515, 1.4596, 0.0000],
[0.0000, 0.0000, 0.0000, 0.0000, 0.0000]])

Process finished with exit code 0

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Pytorch损失函数nn.NLLLoss2d()用法说明

    最近做显著星检测用到了NLL损失函数 对于NLL函数,需要自己计算log和softmax的概率值,然后从才能作为输入 输入 [batch_size, channel , h, w] 目标 [batch_size, h, w] 输入的目标矩阵,每个像素必须是类型.举个例子.第一个像素是0,代表着类别属于输入的第1个通道:第二个像素是0,代表着类别属于输入的第0个通道,以此类推. x = Variable(torch.Tensor([[[1, 2, 1], [2, 2, 1], [0, 1, 1]]

  • 浅析PyTorch中nn.Linear的使用

    查看源码 Linear 的初始化部分: class Linear(Module): ... __constants__ = ['bias'] def __init__(self, in_features, out_features, bias=True): super(Linear, self).__init__() self.in_features = in_features self.out_features = out_features self.weight = Parameter(to

  • pytorch中nn.Conv1d的用法详解

    先粘贴一段official guide:nn.conv1d官方 我一开始被in_channels.out_channels卡住了很久,结果发现就和conv2d是一毛一样的.话不多说,先粘代码(菜鸡的自我修养) class CNN1d(nn.Module): def __init__(self): super(CNN1d,self).__init__() self.layer1 = nn.Sequential( nn.Conv1d(1,100,2), nn.BatchNorm1d(100), nn

  • pytorch 中nn.Dropout的使用说明

    看代码吧~ Class USeDropout(nn.Module): def __init__(self): super(DropoutFC, self).__init__() self.fc = nn.Linear(100,20) self.dropout = nn.Dropout(p=0.5) def forward(self, input): out = self.fc(input) out = self.dropout(out) return out Net = USeDropout()

  • pytorch中nn.RNN()汇总

    nn.RNN(input_size, hidden_size, num_layers=1, nonlinearity=tanh, bias=True, batch_first=False, dropout=0, bidirectional=False) 参数说明 input_size输入特征的维度, 一般rnn中输入的是词向量,那么 input_size 就等于一个词向量的维度 hidden_size隐藏层神经元个数,或者也叫输出的维度(因为rnn输出为各个时间步上的隐藏状态) num_laye

  • 对Pytorch中nn.ModuleList 和 nn.Sequential详解

    简而言之就是,nn.Sequential类似于Keras中的贯序模型,它是Module的子类,在构建数个网络层之后会自动调用forward()方法,从而有网络模型生成.而nn.ModuleList仅仅类似于pytho中的list类型,只是将一系列层装入列表,并没有实现forward()方法,因此也不会有网络模型产生的副作用. 需要注意的是,nn.ModuleList接受的必须是subModule类型,例如: nn.ModuleList( [nn.ModuleList([Conv(inp_dim

  • pytorch中nn.Flatten()函数详解及示例

    torch.nn.Flatten(start_dim=1, end_dim=- 1) 作用:将连续的维度范围展平为张量. 经常在nn.Sequential()中出现,一般写在某个神经网络模型之后,用于对神经网络模型的输出进行处理,得到tensor类型的数据. 有俩个参数,start_dim和end_dim,分别表示开始的维度和终止的维度,默认值分别是1和-1,其中1表示第一维度,-1表示最后的维度.结合起来看意思就是从第一维度到最后一个维度全部给展平为张量.(注意:数据的维度是从0开始的,也就是

  • 浅谈pytorch中的dropout的概率p

    最近需要训练一个模型,在优化模型时用了dropout函数,为了减少过拟合. 训练的时候用dropout,测试的时候不用dropout.刚开始以为p是保留神经元的比率,训练设置0.5,测试设置1,loss根本没减小过,全设置成1也是一样的效果,后来就考虑到是不是p设置错了. 上网一搜,果然是的!!!p的含义理解错了!不是保留的,而是不保留的! 具体的代码为: x2 = F.dropout(x1, p) x1是上一层网络的输出,p是需要删除的神经元的比例. 当p=0时,保留全部神经元更新.当p=1时

  • 浅析PyTorch中nn.Module的使用

    torch.nn.Modules 相当于是对网络某种层的封装,包括网络结构以及网络参数和一些操作 torch.nn.Module 是所有神经网络单元的基类 查看源码 初始化部分: def __init__(self): self._backend = thnn_backend self._parameters = OrderedDict() self._buffers = OrderedDict() self._backward_hooks = OrderedDict() self._forwa

  • 浅谈PyTorch中in-place operation的含义

    in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值.可以把它成为原地操作符. 在pytorch中经常加后缀"_"来代表原地in-place operation,比如说.add_() 或者.scatter().python里面的+=,*=也是in-place operation. 下面是正常的加操作,执行结束加操作之后x的值没有发生变化: import torch x=torch.rand(2) #t

  • PyTorch之nn.ReLU与F.ReLU的区别介绍

    我就废话不多说了,大家还是直接看代码吧~ import torch.nn as nn import torch.nn.functional as F import torch.nn as nn class AlexNet_1(nn.Module): def __init__(self, num_classes=n): super(AlexNet, self).__init__() self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_siz

随机推荐