DL4J中文文件/模型/動物園用法
關於DL4J模型動物園
DL4J具有可直接從DL4J訪問和例項化的本地模型動物園。模型動物園還包括用於不同資料集的預訓練權重,這些資料集是自動下載的,並使用校驗總和機制檢查完整性。
如果你想使用新的模型動物園,你需要新增它作為依賴項。Maven POM將新增以下內容:
<dependency> <groupId>org.deeplearning4j</groupId> <artifactId>deeplearning4j-zoo</artifactId> <version>1.0.0-beta3</version> </dependency>
入門
一旦你成功地將動物園依賴項新增到專案中,就可以開始匯入和使用模型。每一個模型擴充套件了ZooModel
抽象類,並使用了InstantiableModel
介面。這些類提供了幫助你初始化空的、新的網路或預先訓練的網路的方法。
初始化新配置
你可以使用.init()
方法立即從動物園例項化一個模型。例如,如果要例項化一個新的未經訓練的AlexNet網路,可以使用以下程式碼:
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();
如果希望調優引數或更改優化演算法,可以獲得對底層網路配置的引用:
ZooModel zooModel = new AlexNet(numberOfClassesInYourData, randomSeed, iterations);
MultiLayerConfiguration net = zooModel.conf();
初始化預先訓練的權值
一些模型具有可用的預訓練權重,並且少量模型跨不同的資料集進行預訓練。PretrainedType是概述不同權重型別的列舉器,包括IMAGENET、MNIST、CIFAR10和VGGFACE。
例如,你可以初始化VGG-16模型,使用ImageNet的權重,例如:
import org.deeplearning4j.zoo.model.VGG16;
import org.deeplearning4j.zoo.*;
...
ZooModel zooModel = new VGG16();
Model net = zooModel.initPretrained(PretrainedType.IMAGENET);
並用VGGFace訓練的權值初始化另一個VGG16模型:
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找到一個完整的模型列表。
這包括ImageNet模型,如VGG-16, ResNet-50, AlexNet, Inception-ResNet-v1, LeNet等。
- AlexNet
- Darknet19
- FaceNetNN4Small2
- InceptionResNetV1
- LeNet
- ResNet50
- SimpleCNN
- TextGenerationLSTM
- TinyYOLO
- VGG16
- VGG19
高階用法
如果你想在不同的用例中使用這些模型,動物園還有幾個附加的特徵。
改變輸入
除了將某些配置資訊傳遞給動物園模型的建構函式之外,還可以使用.setInputShape()更改其輸入形狀。注意:這隻適用於新的配置,並且不會影響預先訓練的模型:
ZooModel zooModel = new ResNet50(10, 123, 1);
zooModel.setInputShape(new int[]{3,28,28});
遷移學習
預先訓練的模型對於遷移學習來說是完美的!你可以在這裡閱讀更多關於遷移學習的內容。
工作間
初始化方法通常有一個名為“workspaceMode
”的附加引數。對於大多數使用者來說,你不需要使用它;但是,如果你有一臺具有“健壯”規範的大型機器,則可以為具有數百萬引數的模型傳遞WorkspaceMode.SINGLE
,如VGG-19。要了解更多關於工作間的內容,請參閱本節。