dropblock的实现:pytorch中卷积网络的正则化方法。

dropblock的Python项目详细描述


DropBlock

build

实现DropBlock: A regularization method for convolutional networks 在火把里。

摘要

当深度神经网络被过度参数化时,它们通常工作得很好。 经过大量的噪声和正则化训练,比如 体重下降。虽然辍学被广泛地用作一种正则化 对于完全连接的层,它通常对卷积层不太有效。 卷积层退学的失败可能是由于 卷积层中的激活单元是空间相关的,所以 尽管辍学,信息仍然可以通过卷积网络流动。 因此,需要一种结构形式的辍学来正则化卷积网络。 在本文中,我们引入了dropblock,一种结构化的dropout形式,其中 将要素地图的相邻区域放在一起。 我们发现在skip连接中应用dropblock除了 卷积层提高了精度。而且,逐渐增加的数量 在训练过程中减少单位的数量,可以获得更好的精度和对超参数选择的鲁棒性。 大量实验表明,dropblock在正则化方面优于dropout。 卷积网络。关于imagenet分类,resnet-50架构 dropblock的准确率达到78.13%,比基线提高了1.6%以上。 在coco检测中,dropblock将视网膜网的平均检测精度从36.8%提高到38.4%。

安装

直接从pypi安装:

pip install dropblock

或者是github的最新版本:

pip install git+https://github.com/miguelvr/dropblock.git#egg=dropblock

note:实现和测试是在python 3.6中完成的,如果您对其他版本的python有问题,请打开一个问题。

用法

对于二维输入(dropblock2d):

importtorchfromdropblockimportDropBlock2D# (bsize, n_feats, height, width)x=torch.rand(100,10,16,16)drop_block=DropBlock2D(block_size=3,drop_prob=0.3)regularized_x=drop_block(x)

对于3D输入(DropBlock3D):

importtorchfromdropblockimportDropBlock3D# (bsize, n_feats, depth, height, width)x=torch.rand(100,10,16,16,16)drop_block=DropBlock3D(block_size=3,drop_prob=0.3)regularized_x=drop_block(x)

预定的DropBlock:

importtorchfromdropblockimportDropBlock2D,LinearScheduler# (bsize, n_feats, depth, height, width)loader=[torch.rand(20,10,16,16)for_inrange(10)]drop_block=LinearScheduler(DropBlock2D(block_size=3,drop_prob=0.),start_value=0.,stop_value=0.25,nr_steps=5)probs=[]forxinloader:drop_block.step()regularized_x=drop_block(x)probs.append(drop_block.dropblock.drop_prob)print(probs)

下降概率为:

>>> [0.    , 0.0625, 0.125 , 0.1875, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25]

用户应该在批处理循环开始时包含step()调用, 或者在模型的forward调用开始时。

检查examples/resnet-cifar10.py到 请参见实现示例。

实施细节

我们优先使用drop_prob而不是keep_prob, 为了让这场争论与皮托的退学保持一致。 不管怎样,其他的一切工作方式都应该与本文所描述的类似。

基准

请参阅BENCHMARK.md

参考

[Ghiasi等人,2018]dropblock:卷积网络的正则化方法

待办事项

  • [X]定时DropBlock
  • [X]获取基准数字
  • [X]扩展3D图像的概念

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java类之间并发性不一致的HashMap   插件如何在JavaSwing中使用UIManager和Classloader从外部jar安装外观?   java JasperReports:找不到子报表   在项目中找不到java生成的Javadoc文件   java BigDecimal。multiply()和divide()方法返回十六进制数。为什么?   java统计出现次数并从字符串中删除重复项   调用运算符时发生java NullPointerException   Spring和Hibernate之间的java配置错误   JavaZK将用户重定向回上一页   Javasocket为传出连接指定特定的网络接口   如果拖动到某个区域外,java Make按钮操作将被取消   如何在Eclipse for selenium 3.141.59中添加Java文档链接   java从匹配条件的数组中获取所有索引   docker未连接到RemoteWebDriver的java Gitlab ci selenium测试   java重写run方法   utf 8如何使用java解码UTF8编码的字符串?   java如何从eclipse调试部署在tomcat上的web应用程序?   将字母字符与前面没有百分号的Java正则表达式匹配