Pythorch中的简单层次模型

simple-hierarchy-pytorch的Python项目详细描述


分级分类网络

在查看对层次结构是类固有的内容进行分类的任务时,我搜索了任何可能使用具有层次结构的分组类进行非常简单分类的库。但是,我没有找到任何适合这个相对简单的任务的库。所以我试图创造一个更普遍的解决方案,希望其他人能从中受益。在

这个概念非常简单:为相互依赖的类组创建通用体系结构。所以从模型的基本概念开始,我想用Pythorch做一些能代表我想法的东西。在

示例

让我们来做一个图像地理定位问题,我们想知道城市、县和地区的位置。我们将这些分组分别称为a、b、c。给定一个图像输入,我们希望预测所有3个类,但也需要一个能够正确表示这些关系的体系结构。下面的网络体系结构说明了一种可能的解决方案(此包将尝试在一定程度上实现这种解决方案)。 通过输入图像,可以将体系结构可视化: Network Architecture

类层次结构是这样的

Class Heirarchy

类层次结构与此包中的示例结构类似。每个节点都有一个命名分组的元组以及该分组中的类数。这就是网络体系结构中最终输出大小的原因。圆圈内的大绿色加号用于指示两个输入(绿色箭头线)的连接。这就是为什么类b和c的部分的输入大小为4096+1024=5120。在

安装

首先,安装Pythorch。您可以使用requirements.txt来安装Pythorc1.7,但是,最好的安装方法是转到PyTorch's website并按照那里的说明进行操作。这个包可以在低于1.7的版本上运行,但是它只在Pythorch 1.7上测试过。此软件包允许Pythorch>;=1.0版本,但请注意,只测试了1.7版本。 一旦安装了PyTorch,使用pip可以使安装变得简单易行。可以通过

pip install simple-hierarchy-pytorch

还可以克隆存储库,然后从源代码构建。可以这样做:

^{pr2}$

最后,这个存储库可以简单地下载并作为python代码导入,因为这里基本上只需要两个类。在

入门

这种体系结构允许对涉及有限层次结构的基本任务进行简单而适应性强的层次分类。该软件包的目标是图像分类,其中有多个组可以对某些内容进行分类,但也可以同样很好地用于其他目的。下面是如何将包与定义的类一起使用的示例:

from simple_hierarchy.hierarchal_model import HierarchalModel 
hierarchy = {
    ('A', 2) : [('B', 5)],
    ('B', 5) : [('C', 7)]
}
model_base = nn.Sequential(
  nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5), 
  nn.ReLU(), 
  nn.MaxPool2d(kernel_size=2, stride=2), 
  nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5), 
  nn.ReLU(), 
  nn.MaxPool2d(kernel_size=2, stride=2), 
  nn.Flatten(start_dim=1), 
  nn.Linear(in_features=1296, out_features=120), 
  nn.ReLU(), 
  nn.Linear(in_features=120, out_features=84), 
  nn.ReLU()
)
model = HierarchalModel(hierarchy, (84, 32, 32),base_model=model_base)
# Example input 
a = torch.rand(3,50,50).unsqueeze(0)
model(a)

然后,可以像其他模型一样在图像数据集上训练模型。在

另外,在这个repository中有jupyter notebook说明了如何使用和运行这些类的一些示例。大部分的jupyter笔记本是自包含的,所以所有必要的代码都已经在里面了,独立于软件包。一开始也是这个包的一个例子。 公式非常简单,因此将层次模型合并到您的网络中不需要太多额外的工作。 然而,这里给出的解决方案非常简单,因此可以很容易地在特定情况下实现。HierarchalModel类只是为更多的用例提供了一个通用的解决方案,并给了我测试和构建一些架构思想的机会。在

作者

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

推荐PyPI第三方库


热门话题
java从Dropwizard中的Minio检索文件时,GET请求中的超时是如何处理的?   带Hibernate的java Jackson用于序列化以避免枚举   Raspberry Pi上的java Jave分段错误   java在屏幕旋转时不保存当前片段和数据   java War文件未在Heroku上正确部署   如何使用Java处理Selenium webdriver中的促销广告或cookie   java处理“用法:PApplet[options]<classname>[sketch args]”   java文本文件错误扫描程序   运行第一个JavaFX模块化程序时出现java异常   java将fileoutputstream转换为字符串   如何调试gstreamerjava?   java Spring RestTemplate ResponseBody类是什么样的   如何将JSON数组转换为Java列表。我在用斯文森   javascript在显示div按钮后进入新页面