# 动物园用法

## 关于DL4J模型动物园

DL4J具有可直接从DL4J访问和实例化的本地模型动物园。模型动物园还包括用于不同数据集的预训练权重，这些数据集是自动下载的，并使用校验总和机制检查完整性。

如果你想使用新的模型动物园，你需要添加它作为依赖项。Maven POM将添加以下内容：

```markup
<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-zoo</artifactId>
    <version>1.0.0-beta6</version>
</dependency>
```

## 入门

一旦你成功地将动物园依赖项添加到项目中，就可以开始导入和使用模型。每一个模型扩展了`ZooModel`抽象类，并使用了`InstantiableModel`接口。这些类提供了帮助你初始化空的、新的网络或预先训练的网络的方法。

### 初始化新配置

你可以使用`.init()`方法立即从动物园实例化一个模型。例如，如果要实例化一个新的未经训练的AlexNet网络，可以使用以下代码：

```java
import org.deeplearning4j.zoo.model.AlexNet
import org.deeplearning4j.zoo.*;

...

int numberOfClassesInYourData = 1000;
int randomSeed = 123;
int iterations = 1; // 这几乎总是1。

ZooModel zooModel = new AlexNet(numberOfClassesInYourData, randomSeed, iterations);
Model net = zooModel.init();
```

如果希望调优参数或更改优化算法，可以获得对底层网络配置的引用：

```java
ZooModel zooModel = new AlexNet(numberOfClassesInYourData, randomSeed, iterations);
MultiLayerConfiguration net = zooModel.conf();
```

### 初始化预先训练的权值

一些模型具有可用的预训练权重，并且少量模型跨不同的数据集进行预训练。PretrainedType是概述不同权重类型的枚举器，包括IMAGENET、MNIST、CIFAR10和VGGFACE。

例如，你可以初始化VGG-16模型，使用ImageNet的权重，例如：

```java
import org.deeplearning4j.zoo.model.VGG16;
import org.deeplearning4j.zoo.*;

...

ZooModel zooModel = new VGG16();
Model net = zooModel.initPretrained(PretrainedType.IMAGENET);
```

并用VGGFace训练的权值初始化另一个VGG16模型：

```java
ZooModel zooModel = new VGG16();
Model net = zooModel.initPretrained(PretrainedType.VGGFACE);
```

如果不确定模型是否包含预训练权重，可以使用返回布尔值的.`pretrainedAvailable`()方法。简单地将一个`PretrainedType`枚举传递给这个方法，如果权重可用，它将返回true。

注意，对于卷积模型，输入形状信息遵循NCHW约定。因此，如果模型的输入形状默认值是 `new int[]{3, 224, 224}，`则意味着该模型具有3个通道和高度/宽度为224。

## 动物园里有什么？

模型动物园带有在深入学习社区著名的图像识别配置。动物园还包括一个用于文本生成的LSTM，以及一个用于一般图像识别的简单CNN。

你可以使用这个[deeplearning4j-zoo](https://github.com/deeplearning4j/deeplearning4j/tree/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model)找到一个完整的模型列表。

这包括ImageNet模型，如VGG-16, ResNet-50, AlexNet, Inception-ResNet-v1, LeNet等。

* [AlexNet](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/AlexNet.java)
* [Darknet19](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/Darknet19.java)
* [FaceNetNN4Small2](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/FaceNetNN4Small2.java)
* [InceptionResNetV1](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/InceptionResNetV1.java)
* [LeNet](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/LeNet.java)
* [ResNet50](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/ResNet50.java)
* [SimpleCNN](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/SimpleCNN.java)
* [TextGenerationLSTM](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/TextGenerationLSTM.java)
* [TinyYOLO](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/TinyYOLO.java)
* [VGG16](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/VGG16.java)
* [VGG19](https://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-zoo/src/main/java/org/deeplearning4j/zoo/model/VGG19.java)

## 高级用法

如果你想在不同的用例中使用这些模型，动物园还有几个附加的特征。

### 改变输入

除了将某些配置信息传递给动物园模型的构造函数之外，还可以使用.setInputShape()更改其输入形状。注意：这只适用于新的配置，并且不会影响预先训练的模型：

```java
ZooModel zooModel = new ResNet50(10, 123, 1);
zooModel.setInputShape(new int[]{3,28,28});
```

### 迁移学习

预先训练的模型对于迁移学习来说是完美的！你可以在[这里](https://deeplearning4j.org/docs/latest/deeplearning4j-nn-transfer-learning)阅读更多关于迁移学习的内容。

### 工作间

初始化方法通常有一个名为“`workspaceMode`”的附加参数。对于大多数用户来说，你不需要使用它；但是，如果你有一台具有“健壮”规范的大型机器，则可以为具有数百万参数的模型传递`WorkspaceMode.SINGLE` ，如VGG-19。要了解更多关于工作间的内容，请参阅[本节](https://deeplearning4j.org/docs/latest/deeplearning4j-config-workspaces)。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://deeplearning4j.konduit.ai/zhong-wen-v1.0.0/mo-xing/dong-wu-yuan-yong-fa.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
