数据空间
您当前的位置: 首页 /数据知识

教你使用torchlayers 来构建PyTorch 模型

发布时间:[2020-05-11] 来源:数据派THU
点击量:

 通过在线搜索的趋势判断,PyTorch继续受到人们的普遍关注,更重要的是,PyTorch的使用率在不断提高。PyTorch被认为具有强大而灵活的特点,这些特点让其受到了研究者的欢迎。然而,PyTorch过去因缺乏简化的高级API(例如TensorFlow的Keras) 常常受到从业者的批评。但是这种情况最近已经改变了。


torchlayers(旨在为PyTorch做Keras给TensorFlow所做的事情。这个项目的开发者简洁地定义了它:

torchlayers是一个基于PyTorch的库,提供了torch.nn层的形状和维度的自动推断以及当前最好的网络结构(例如Efficient-Net)中的构建块。

与Keras中的操作类似,上述的操作不需要用户干预(除了调用一次torchlayers.build)。

除了上面提到的形状和维度的推断,torchlayers 还包括其他类似Keras的层,例如 torchlayers.Reshape在改变输入张量形状的同时,保留了批量的维度,见下面链接1,包括之前在 ImageNet 竞赛中见过的最好的层(比如 PloyNet)。此外,它还提供了一些有用的默认值,例如卷积核的大小(torchlayers的默认值是3)。
 
使用pip安装非常简单:

  •  
pip install --user torchlayers  

torchlayers 的GitHub 主页提供了一些例子来展示它的一些功能。我喜欢这个图像和文本分类二合一的例子!我在下面附上了代码,这例子展示了:

  • torch.nn 和 torchlayers 层的混合使用

  • 形状和维度推断(卷积、线性输入和BatchNorm)

  • 默认的卷积核v大小

  • 卷积的填充默认为 “same”

  • torchlayers池化层的使用(和Keras 相似,全局最大池化)


  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
import torch  import torchlayers as tl    # torch.nn and torchlayers can be mixed easily   model = torch.nn.Sequential(      tl.Conv(64),                   # specify ONLY out_channels      torch.nn.ReLU(),               # use torch.nn wherever you wish      tl.BatchNorm(),                # BatchNormNd inferred from input      tl.Conv(128),                  # Default kernel_size equal to 3      tl.ReLU(),      tl.Conv(256, kernel_size=11),  # "same" padding as default      tl.GlobalMaxPool(),            # Known from Keras      tl.Linear(10),                 # Output for 10 classes  )  

当指定输入形状后(对于上面定义好的模型,图像和文本分类的输入形状如下所示):我们可以用 torchlayers.build来构建一个已经定义好的网络。
 
  •  
  •  
  •  
  •  
  •  
  •  
# Image...  mnist_model = tl.build(model, torch.randn(1, 3, 28, 28))    # ...or text  # [batch, embedding, timesteps], first dimension > 1 for BatchNorm1d to work  text_model = tl.build(model, torch.randn(2, 300, 1))  

build与Keras中的工作机制类似,相当于将模型编译为PyTorch原语。它通过post_build 函数提供了一些附加功能(例如权重初始化,如下所示)

  •  
  •  
  •  
  •  
class _MyModuleImpl(torch.nn.Linear):      def post_build(self):          # You can do anything here really          torch.nn.init.eye_(self.weights)  

torchlayers为使用PyTorch来实现类似Keras的模型构建提供了一些有用的功能,并填补了一个明显的空白。时间会告诉我们长期来看该项目会如何发展,但这肯定是一个良好的开端。

 

中翰软件:专注数据治理15年(http://www.jobhand.cn


发表评论 共有条评论
用户名: 密码:
匿名发表