dl4j MultiLayerNetwork не имеет конструктора, принимающего NeuralNetConfiguration (версия 0.9.1)

Я пытаюсь написать простой пример Classifier в Scala и, глядя на примеры dl4j, создается экземпляр NeuralNetConfiguration (с помощью построителя), а затем передается в качестве аргумента конструктору класса MultiLayerNetwork. Однако, глядя на исходный код, MultiLayerNetwork не имеет конструктора, использующего NeuralNetConfiguration в качестве примера. Похоже, эти примеры устарели. Кто-нибудь знает, как это сделать в последней dl4j версии?

Мне удалось найти обходной путь, но я не уверен, что это правильный способ сделать это:

val conf = new NeuralNetConfiguration.Builder()
   .seed(seed) 
   .iterations(iterations) 
   .learningRate(1e-6f) 
   .optimizationAlgo(OptimizationAlgorithm.CONJUGATE_GRADIENT) 
   .l1(1e-1).regularization(true).l2(2e-4)
   .useDropConnect(true)
   .layer(hiddenLayer)
   .layer(outputLayer)
   .build()
val confs: util.List[NeuralNetConfiguration] = new util.LinkedList();
confs.add(conf)
val builder = new MultiLayerConfiguration.Builder()
builder.setConfs(confs)
val model: MultiLayerNetwork = new MultiLayerNetwork(builder.build())

person Pedro Alipio    schedule 15.01.2018    source источник


Ответы (2)


Вам нужно внимательно следить за примерами. NeuralNetConfiguration() — это ваши базовые параметры, затем вы перечисляете свои слои (присмотритесь к любому из примеров) и заканчиваете сборщик вот так. Это даст вам MultiLayerConfiguration.

person Adam Gibson    schedule 16.01.2018
comment
Я понимаю. Я могу исправить это, используя .list(hiddenLayer, outputLayer). Большое спасибо. - person Pedro Alipio; 16.01.2018

Класс MultiLayerNetwork принимает экземпляр класса MultiLayerConfiguration в качестве параметра. Вы можете взглянуть на javadocs. Вы можете создать экземпляр MultiLayerConfiguration следующим образом;

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder();

На самом деле, когда вы вызываете getConf из MultiLayerConfiguration, он возвращает NeuralNetConfiguration. Когда вы посмотрите на документы, вы увидите, что MultiLayerConfiguration.Builder является вложенным классом MultiLayerConfiguration, а подклассом MultiLayerConfiguration.Builder является NeuralNetConfiguration.ListBuilder. Для получения дополнительной информации вы можете прочитать это.

ИЗМЕНИТЬ I

Когда вы используете DL4J в Scala, просто удалите обозначения типов. Например;

val conf = new NeuralNetConfiguration.Builder()
val multiLayerNetwork = new MultiLayerNetwork(conf)

Это должно работать. Пожалуйста, дайте мне знать по любым вопросам, я надеюсь, что это поможет!

person ulubeyn    schedule 15.01.2018
comment
Если я делаю val conf: MultiLayerConfiguration = new NeuralNetConfiguration.Builder(), то получаю: несоответствие типов; найдено: org.deeplearning4j.nn.conf.NeuralNetConfiguration.Builder требуется: org.deeplearning4j.nn.conf.MultiLayerConfiguration Я отредактирую свой вопрос, чтобы показать, как я работаю. - person Pedro Alipio; 16.01.2018
comment
@PedroAlipio, хорошо! Когда вы сделаете обновление, я проверю его. - person ulubeyn; 16.01.2018