pytorch dropout用法

pytorch dropout用法链接:https://www.zhihu.com/question/67209417/answer/302434279刚踩的坑,差点就哭出来了TT.—我明明加了一百个dropout,为什么结果一点都没变使用F.dropout(nn.functional.dropout)的时候需要设置它的training这个状态参数与模型整体的一致.比如: Cla…

大家好,又见面了,我是你们的朋友全栈君。

关于dropout改进的新技术分享:

dropout改进_jacke121的专栏-CSDN博客_dropout改进

链接:https://www.zhihu.com/question/67209417/answer/302434279

刚踩的坑, 差点就哭出来了TT. — 我明明加了一百个dropout, 为什么结果一点都没变

使用F.dropout ( nn.functional.dropout )的时候需要设置它的training这个状态参数与模型整体的一致.

比如:

Class DropoutFC(nn.Module):

def __init__(self):

super(DropoutFC, self).__init__()

self.fc = nn.Linear(100,20)


def forward(self, input):

out = self.fc(input)

out = F.dropout(out,training=self.training, p=0.5)

return out


Net = DropoutFC()

Net.train()


# train the Net

这段代码中的F.dropout实际上是没有任何用的, 因为它的training状态一直是默认值False. 由于F.dropout只是相当于引用的一个外部函数, 模型整体的training状态变化也不会引起F.dropout这个函数的training状态发生变化. 所以, 此处的out = F.dropout(out) 就是 out = out. Ref: https://github.com/pytorch/pytorch/blob/master/torch/nn/functional.py#L535

正确的使用方法如下, 将模型整体的training状态参数传入dropout函数

Class DropoutFC(nn.Module):

def __init__(self):

super(DropoutFC, self).__init__()

self.fc = nn.Linear(100,20)


def forward(self, input):

out = self.fc(input)

out = F.dropout(out, p=0.5, training=self.training)

return out


Net = DropoutFC()

Net.train()


# train the Net

​​​​

或者直接使用nn.Dropout() (nn.Dropout()实际上是对F.dropout的一个包装, 也将self.training传入了) Ref: https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/dropout.py#L46

Class DropoutFC(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 = DropoutFC()

Net.train()

​​​​​

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131129.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 免杀工具charlotte详解,想要成为白帽子,你不会连这个工具都不会用吧?「建议收藏」

    免杀工具charlotte详解,想要成为白帽子,你不会连这个工具都不会用吧?「建议收藏」前言多看看别人的工具,自己也就会写了。(手动狗头)charlotte是一款Python编写的自动化免杀工具,用来生成免杀的dll文件,在antiscan.me上为全绿,效果可见一斑。官方地址如下:https://github.com/9emin1/charlotte,其依赖mingw-w64环境,可使用下面的命令安装:apt-getinstallmingw-w64*利用动态导出以及xor编码实现了对杀软的绕过。其文件很简单,只有一个简单的py文件以及一个cpp文件,根据以后以往的经验来看

  • Android telephony_android获取真实时间

    Android telephony_android获取真实时间做一波获取手机卡LET的信息操作。看了一波源码写出来的一些东西首先需要的一些权限(危险权限动态获取一下,之前的里面有):<uses-permissionandroid:name=”android.permission.INTERNET”/><uses-permissionandroid:name=”android.permission.ACCESS_WIFI_ST…

  • 常见的数据库有哪几种?[通俗易懂]

    常见的数据库有哪几种?[通俗易懂]SQL(StructuredQueryLanguage,结构化查询语言)是一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据、查询数据、更新数据等。SQL是IBM公司于1975—1979年之间开发出来的,在20世纪随着数据库技术的发展,数据库产品越来越多,如Oracle、DB2、MongoDB、SQLServer、MySQL等。1.Oracle数据库Oracle数据库管理系统是由甲骨文(Oracle)公司开发的,在数据库领域一直处于领先地位。目前,Oracle数据库覆盖了大、中

  • 正则表达式中的特殊字符一览[通俗易懂]

    正则表达式中的特殊字符一览[通俗易懂]
    正则表达式中的特殊字符一览
     
    〓简介〓
    字符意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。
    例如:/b/匹配字符’b’,通过在b前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示匹配一个单词的分界线。或者:对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。为了匹配字面上的*,在a前面加一个反斜杠;

  • Java中StringBuilder的清空方法比較

    Java中StringBuilder的清空方法比較

  • hql语言

    hql语言hql语言

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号