为开箱即用应用程序预先构建的模型架构和权重。
DL4J具有可直接从DL4J访问和实例化的本地模型动物园。模型动物园还包括用于不同数据集的预训练权重,这些数据集是自动下载的,并使用校验总和机制检查完整性。
如果你想使用新的模型动物园,你需要添加它作为依赖项。Maven POM将添加以下内容:
一旦你成功地将动物园依赖项添加到项目中,就可以开始导入和使用模型。每一个模型扩展了ZooModel
抽象类,并使用了InstantiableModel
接口。这些类提供了帮助你初始化空的、新的网络或预先训练的网络的方法。
你可以使用.init()
方法立即从动物园实例化一个模型。例如,如果要实例化一个新的未经训练的AlexNet网络,可以使用以下代码:
如果希望调优参数或更改优化算法,可以获得对底层网络配置的引用:
一些模型具有可用的预训练权重,并且少量模型跨不同的数据集进行预训练。PretrainedType是概述不同权重类型的枚举器,包括IMAGENET、MNIST、CIFAR10和VGGFACE。
例如,你可以初始化VGG-16模型,使用ImageNet的权重,例如:
并用VGGFace训练的权值初始化另一个VGG16模型:
如果不确定模型是否包含预训练权重,可以使用返回布尔值的.pretrainedAvailable
()方法。简单地将一个PretrainedType
枚举传递给这个方法,如果权重可用,它将返回true。
注意,对于卷积模型,输入形状信息遵循NCHW约定。因此,如果模型的输入形状默认值是 new int[]{3, 224, 224},
则意味着该模型具有3个通道和高度/宽度为224。
模型动物园带有在深入学习社区著名的图像识别配置。动物园还包括一个用于文本生成的LSTM,以及一个用于一般图像识别的简单CNN。
你可以使用这个deeplearning4j-zoo找到一个完整的模型列表。
这包括ImageNet模型,如VGG-16, ResNet-50, AlexNet, Inception-ResNet-v1, LeNet等。
如果你想在不同的用例中使用这些模型,动物园还有几个附加的特征。
除了将某些配置信息传递给动物园模型的构造函数之外,还可以使用.setInputShape()更改其输入形状。注意:这只适用于新的配置,并且不会影响预先训练的模型:
预先训练的模型对于迁移学习来说是完美的!你可以在这里阅读更多关于迁移学习的内容。
初始化方法通常有一个名为“workspaceMode
”的附加参数。对于大多数用户来说,你不需要使用它;但是,如果你有一台具有“健壮”规范的大型机器,则可以为具有数百万参数的模型传递WorkspaceMode.SINGLE
,如VGG-19。要了解更多关于工作间的内容,请参阅本节。