Извлечение функций из предварительно обученной модели (RSNET-152) в MXNET - PullRequest
0 голосов
/ 09 декабря 2018

Привет. Я пытаюсь извлечь вывод из слоя Penulitmate из предварительно обученной модели (RsNet-152) в MxNet.Поскольку мне нужен сценарий для работы с Java-приложением, я выбрал scala в качестве выбора языка.

Я выполнил шаги, упомянутые здесь https://mxnet.incubator.apache.org/tutorials/python/predict_image.html

, и соответственно изменил сценарий.Вот функция loadModel.

  def loadResnetModel(modelPath: String): Module = {
val (net, argParams, auxParams) = Model.loadCheckpoint(modelPath, modelFileNumber)
val allLayer = net.getInternals()
val secondLastLayer = allLayer.get("flatten0_output")
val mod = new Module(symbolVar = secondLastLayer, contexts = Context.cpu(), labelNames =null)
val dataShape = ListMap("data" -> Shape(1, 3, 224, 224))
mod.bind(dataShapes=dataShape, forTraining = false)
mod.setParams(argParams, auxParams, allowMissing=true)
mod

при попытке запустить скрипт, я получаю следующую ошибку:

 Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: Find name fc1_bias that is not in the arguments
 [java]     at scala.Predef$.require(Predef.scala:224)
 [java]     at org.apache.mxnet.Executor$$anonfun$copyParamsFrom$1.apply(Executor.scala:274)
 [java]     at org.apache.mxnet.Executor$$anonfun$copyParamsFrom$1.apply(Executor.scala:270)
 [java]     at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:221)
 [java]     at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:428)
 [java]     at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:428)
 [java]     at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:428)
 [java]     at org.apache.mxnet.Executor.copyParamsFrom(Executor.scala:270)
 [java]     at org.apache.mxnet.module.DataParallelExecutorGroup$$anonfun$setParams$1.apply(DataParallelExecutorGroup.scala:452)
 [java]     at org.apache.mxnet.module.DataParallelExecutorGroup$$anonfun$setParams$1.apply(DataParallelExecutorGroup.scala:452)
 [java]     at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
 [java]     at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
 [java]     at org.apache.mxnet.module.DataParallelExecutorGroup.setParams(DataParallelExecutorGroup.scala:452)
 [java]     at org.apache.mxnet.module.Module.setParams(Module.scala:201)

PS: я новичок в mxnet и scala.Есть ли очевидная ошибка, которую я не вижу?

1 Ответ

0 голосов
/ 18 декабря 2018

Вам нужно изменить последнюю строку в вашей функции: вместо mod.setParams(argParams, auxParams, allowMissing=true) вам нужно вызвать mod.setParams(argParams, auxParams)

...