将 Caffe 配置转换为 DeepLearning4J 配置
Convert Caffe configuration to DeepLearning4J configuration
我需要使用 DeepLearning4j 实现现有的 Caffe 模型。但是我是 DL4J 的新手,所以不知道如何实现。搜索文档和示例几乎没有帮助,这两者的术语非常不同。
你会如何在 dl4j 中编写下面的 caffe prototxt?
第 1 层:
layers {
name: "myLayer1"
type: CONVOLUTION
bottom: "data"
top: "myLayer1"
blobs_lr: 1
blobs_lr: 2
convolution_param {
num_output: 20
kernel_w: 2
kernel_h: 2
stride_w: 1
stride_h: 1
weight_filler {
type: "msra"
variance_norm: AVERAGE
}
bias_filler {
type: "constant"
}
}
}
第 2 层
layers {
name: "myLayer1Relu"
type: RELU
relu_param {
negative_slope: 0.3
}
bottom: "myLayer1"
top: "myLayer1"
}
第 3 层
layers {
name: "myLayer1_dropout"
type: DROPOUT
bottom: "myLayer1"
top: "myLayer1"
dropout_param {
dropout_ratio: 0.2
}
}
第 4 层
layers {
name: "final_class"
type: INNER_PRODUCT
bottom: "myLayer4"
top: "final_class"
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
inner_product_param {
num_output: 10
weight_filler {
type: "xavier"
variance_norm: AVERAGE
}
bias_filler {
type: "constant"
value: 0
}
}
}
没有自动执行此操作的方法,但仅为几个图层映射构建器 DSL 应该不难。一个最低限度的例子在这里:
https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/convolution/LenetMnistExample.java
您可以看到相同的原语,例如:stride、padding、xavier、biasInit 都在那里。
我们即将推出的 keras 导入可能是您桥接 caffe -> keras -> dl4j 的一种方式。
编辑:我不会为您构建它。 (我不确定这是否是您要找的)
不过,Dl4j 已经有了正确的原语。它没有 variance_norm 的输入层:您在输入之前对输入使用零均值和单位方差归一化。
如果您只阅读 javadoc,我们会将 bias Init 作为配置的一部分:
http://deeplearning4j.org/doc
此 Github repo 包含 DL4J、Caffe、Tensorflow、Torch 之间同一模型的比较。
- 第1层是DL4J ConvolutionLayer,可以传入nOut、kernel、stride、weightInit等属性。从快速搜索看来,msra 等同于 WeightInit.RELU 并且 variance_norm 不是该模型支持的功能。
- 第2层是激活的ConvolutionLayer的一部分
属性;因此,将层的属性设置为 "relu"。负斜率不是该模型支持的功能。
- 第三层也是ConvolutionLayer的一个属性,就是dropOut
你会传入 0.2。正在开展工作以创建一个
特定的 DropOutLayer 但尚未合并。
- 第 4 层将是 DenseLayer,如果它后面有另一层的话
但因为它是最后一层,所以它是一个 OutputLayer
- blobs_lr 分别对权重 lr 和偏差 lr 应用乘数。你可以
- 通过在该层上设置属性来更改该层的学习率
learningRate 和 biasLearningRate
层
- weight_decay在你可以设置的图层上设置l1或l2
对于具有属性 l1 或 l2 的每一层。 DL4J 默认为不
将 l1 或 l2 应用于偏置,因此第二个 weight_decay 设置为 0
咖啡。
- bias filler 已经默认为常量并且默认为 0。
下面是一个快速示例,说明您的代码将如何翻译。可以在 DL4J examples:
中找到更多信息
int learningRate = 0.1;
int l2 = 0.005;
int intputHeight = 28;
int inputWidth = 28;
int channels = 1;
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(seed)
.iterations(iterations)
.regularization(false).l2(l2)
.learningRate(learningRate)
.list()
.layer(0, new ConvolutionLayer.Builder(new int[]{2,2}, new int[] {1,1})
.name("myLayer1")
.activation("relu").dropOut(0.2).nOut(20)
.biasLearningRate(2*learningRate).weightInit(WeightInit.RELU)
.build())
.layer(1, new OutputLayer.Builder()
.name("myLayer4").nOut(10)
.activation("softmax").l2(1 * l2).biasLearningRate(2*learningRate)
.weightInit(WeightInit.XAVIER).build())
.setInputType(InputType.convolutionalFlat(inputHeight,inputWidth,channels))
.build();
我需要使用 DeepLearning4j 实现现有的 Caffe 模型。但是我是 DL4J 的新手,所以不知道如何实现。搜索文档和示例几乎没有帮助,这两者的术语非常不同。 你会如何在 dl4j 中编写下面的 caffe prototxt?
第 1 层:
layers {
name: "myLayer1"
type: CONVOLUTION
bottom: "data"
top: "myLayer1"
blobs_lr: 1
blobs_lr: 2
convolution_param {
num_output: 20
kernel_w: 2
kernel_h: 2
stride_w: 1
stride_h: 1
weight_filler {
type: "msra"
variance_norm: AVERAGE
}
bias_filler {
type: "constant"
}
}
}
第 2 层
layers {
name: "myLayer1Relu"
type: RELU
relu_param {
negative_slope: 0.3
}
bottom: "myLayer1"
top: "myLayer1"
}
第 3 层
layers {
name: "myLayer1_dropout"
type: DROPOUT
bottom: "myLayer1"
top: "myLayer1"
dropout_param {
dropout_ratio: 0.2
}
}
第 4 层
layers {
name: "final_class"
type: INNER_PRODUCT
bottom: "myLayer4"
top: "final_class"
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
inner_product_param {
num_output: 10
weight_filler {
type: "xavier"
variance_norm: AVERAGE
}
bias_filler {
type: "constant"
value: 0
}
}
}
没有自动执行此操作的方法,但仅为几个图层映射构建器 DSL 应该不难。一个最低限度的例子在这里: https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/convolution/LenetMnistExample.java
您可以看到相同的原语,例如:stride、padding、xavier、biasInit 都在那里。
我们即将推出的 keras 导入可能是您桥接 caffe -> keras -> dl4j 的一种方式。
编辑:我不会为您构建它。 (我不确定这是否是您要找的)
不过,Dl4j 已经有了正确的原语。它没有 variance_norm 的输入层:您在输入之前对输入使用零均值和单位方差归一化。
如果您只阅读 javadoc,我们会将 bias Init 作为配置的一部分: http://deeplearning4j.org/doc
此 Github repo 包含 DL4J、Caffe、Tensorflow、Torch 之间同一模型的比较。
- 第1层是DL4J ConvolutionLayer,可以传入nOut、kernel、stride、weightInit等属性。从快速搜索看来,msra 等同于 WeightInit.RELU 并且 variance_norm 不是该模型支持的功能。
- 第2层是激活的ConvolutionLayer的一部分 属性;因此,将层的属性设置为 "relu"。负斜率不是该模型支持的功能。
- 第三层也是ConvolutionLayer的一个属性,就是dropOut 你会传入 0.2。正在开展工作以创建一个 特定的 DropOutLayer 但尚未合并。
- 第 4 层将是 DenseLayer,如果它后面有另一层的话 但因为它是最后一层,所以它是一个 OutputLayer
- blobs_lr 分别对权重 lr 和偏差 lr 应用乘数。你可以
- 通过在该层上设置属性来更改该层的学习率 learningRate 和 biasLearningRate 层
- weight_decay在你可以设置的图层上设置l1或l2 对于具有属性 l1 或 l2 的每一层。 DL4J 默认为不 将 l1 或 l2 应用于偏置,因此第二个 weight_decay 设置为 0 咖啡。
- bias filler 已经默认为常量并且默认为 0。
下面是一个快速示例,说明您的代码将如何翻译。可以在 DL4J examples:
中找到更多信息 int learningRate = 0.1;
int l2 = 0.005;
int intputHeight = 28;
int inputWidth = 28;
int channels = 1;
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(seed)
.iterations(iterations)
.regularization(false).l2(l2)
.learningRate(learningRate)
.list()
.layer(0, new ConvolutionLayer.Builder(new int[]{2,2}, new int[] {1,1})
.name("myLayer1")
.activation("relu").dropOut(0.2).nOut(20)
.biasLearningRate(2*learningRate).weightInit(WeightInit.RELU)
.build())
.layer(1, new OutputLayer.Builder()
.name("myLayer4").nOut(10)
.activation("softmax").l2(1 * l2).biasLearningRate(2*learningRate)
.weightInit(WeightInit.XAVIER).build())
.setInputType(InputType.convolutionalFlat(inputHeight,inputWidth,channels))
.build();