python代码格式结构规范_PyTorch代码规范最佳实践和样式指南

本文总结了使用PyTorch进行深度学习的最佳实践,建议使用Python 3.6+,遵循Google Styleguide。推荐工作流程是从Jupyter Notebook开始探索和构建模型,然后转移到Python脚本进行训练和部署。网络结构应分解为可重用部分,如nn.Sequential()。使用nn.Module的forward方法实现动态操作,避免在forward中使用numpy。在训练过程中,利用BackgroundGenerator后台加载数据和tqdm监控进度。
摘要由CSDN通过智能技术生成

雷锋网 AI 科技评论按,本文不是 Python 的官方风格指南。本文总结了使用 PyTorch 框架进行深入学习的一年多经验中的最佳实践。本文分享的知识主要是以研究的角度来看的,它来源于一个开元的 github 项目。

根据经验,作者建议使用 Python 3.6+,因为以下功能有助于写出干净简单的代码:支持 Python 3.6 以后的输入。

自 Python 3.6 起支持 f 字符串

Python Styleguide 概述

作者尝试按照 Google Styleguide for Python 进行操作,这里是 Google 提供的 python 代码详细样式指南。

常见的命名约定:

Jupyter Notebook与Python脚本

一般来说,建议使用 Jupyternotebook 进行初步探索和使用新的模型和代码。如果你想在更大的数据集上训练模型,就应该使用 Python 脚本。在这里,复用性更为重要。

推荐使用的工作流程是:从Jupyter笔记本开始

探索数据和模型

在 notebook 的单元格中构建类/方法

将代码移动到python脚本中

在服务器上训练/部署

注意,不要将所有层和模型放在同一个文件中。最佳做法是将最终网络分离为单独的文件(networks.py),并将层、损耗和 ops 保存在各自的文件(layers.py、losses.py、ops.py)中。完成的模型(由一个或多个网络组成)应在一个文件中引用,文件名为 yolov3.py、dcgan.py 这样。

在PyTorch中构建神经网络

我们建议将网络拆分为更小的可重用部分。网络由操作或其它网络模块组成。损失函数也是神经网络的模块,因此可以直接集成到网络中。

继承自 nn.module 的类必须有一个 forward 方法来实现各个层或操作的 forward 传递。

使用 self.net(input),可以在输入数据上使用 nn.module。这只需使用对象的 call()方法。output = self.net(input)

PyTorch 中的一个简单网络

对于具有单个输入和单个输出的简单网络,请使用以下模式:class ConvBlock(nn.Module):

def __init__(self):

super(ConvBlock, self).__init__()

block = [nn.Conv2d(...)]

block += [nn.ReLU()]

block += [nn.BatchNorm2d(...)]

self.block = nn.Sequential(*block)

def forward(self, x):

return self.block(x)

class SimpleNetwork(nn.Module):

def __init__(self, num_resnet_blocks=6):

super(SimpleNetwork, self).__init__()

# here we add the individual layers

layers = [ConvBlock(...)]

for i in range(num_resnet_blocks):

layers += [ResBlock(...)]

self.net = nn.Sequential(*layers)

def forward(self, x):

return self.net(x)

需要注意的是:重用简单的、循环的构建块,例如 ConvBlock,它由相同的循环模式(卷积、激活、归一化)组成,并将它们放入单独的nn.模块中。

作者构建了一个所需层的列表,最后使用 nn.Sequ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值