2016-11-07 2 views
1

Мне нужно реализовать существующую модель Caffe с помощью DeepLearning4j. Однако я новичок в DL4J, поэтому не знаю, как реализовать. Поиск в документах и ​​примерах мало помог, терминология этих двух очень разные. Как вы напишете прототип caffe ниже в dl4j?Преобразование конфигурации Caffe в конфигурацию DeepLearning4J

Layer1:

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 
    } 
    } 
} 

ответ

2

Этот Github repo содержит сравнения по этой же модели между DL4J, Caffe, Tensorflow, Torch.

  • 1-й слой DL4J ConvolutionLayer, и вы можете передавать атрибуты относительно nOut, ядра, шага и весаInit. Из быстрого поиска появляется msra эквивалентно WeightInit.RELU, а variance_norm не является функцией, поддерживаемой моделью.
  • 2-й уровень - участник уровня ConvolutionLayer, который является активацией атрибута ; таким образом, установите для слоя атрибут «relu». Отрицательный наклон не является особенностью, поддерживаемой моделью.
  • 3-й слой также является атрибутом на ConvolutionLayer, который является dropOut , и вы пройдете в 0.2. Происходит работа над созданием конкретного DropOutLayer , но его еще не объединили.
  • 4-ый слой будет в DenseLayer если бы был еще один слой после него , но с момента его последнего слоя это OutputLayer
  • blobs_lr применяется множитель веса Ьг и смещения БГПМ.Вы можете
  • изменить скорость обучения на слое путем установки атрибутов на этом слоя для learningRate и biasLearningRate
  • weight_decay является установка l1 или l2 на слое, который вы можете установить для каждого слоя с атрибутами l1 или l2 , DL4J по умолчанию не , применяя l1 или l2 к смещению, таким образом, второй weight_decay установлен на 0 в Caffe.
  • смещения наполнителя уже по умолчанию постоянная и по умолчанию равно 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(); 
+0

Отлично, спасибо. Это хороший стартер. –

1

нет автоматизированного способа сделать это, но сопоставление строительного DSL для нескольких платных листов не должно быть затруднительным. Ниже приводится минимальный пример: https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/convolution/LenetMnistExample.java

Вы можете видеть те же примитивы, например: шаг, отступы, xavier, biasInit все там.

Наш предстоящий импорт keras может быть способом для вас, чтобы мостик caffe -> keras -> dl4j.

Редактировать: Я не собираюсь строить его для вас. (Я не уверен, что это то, что вы ищете здесь)

У Dl4j уже есть правые примитивы. Он не имеет входной слой для variance_norm: используется нулевое среднее и единичную дисперсию нормализации на входе перед передачей его в

У нас есть уклон Init как часть конфигурации, если вы только что прочитали документацию:. http://deeplearning4j.org/doc

+0

Sidenote: Если вы хотите, намного больше помощи, мы всегда рады людям в нашем GITTER канале: https://gitter.im/deeplearning4j/deeplearning4j –

+0

Thx Адам, но только те, вы упомянули, просто и легко адаптироваться. Когда дело доходит до слоев (выше), есть параметры, которые нелегко сопоставить с DL4J, о котором я прошу помочь. (т. е. bias_filler, variance_norm ... для 1-го уровня) –

+0

Прочитайте наш java-документ http://deeplearning4j.org/doc в конфигурации нейронной сети. У нас есть вещи, такие как покрытие biasInit –

Смежные вопросы