ExceptionInInitializerError при запуске простого кода DL4J

В настоящее время я пытаюсь заставить dl4j (deeplearning4j) импортировать мою модель, которую я обучал в keras 1.2.

Это мой код:

public static void main( String[] args )
{
    try {
        MultiLayerNetwork network = KerasModelImport.importKerasSequentialModelAndWeights(
                "C:\\Users\\A\\Documents\\GitHub\\DevanagriRecognizer\\model_keras1.h5");
        System.out.println( "Hello World!" );
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InvalidKerasConfigurationException e) {
        e.printStackTrace();
    } catch (UnsupportedKerasConfigurationException e) {
        e.printStackTrace();
    }
}

Я использую Maven для обработки зависимостей, и я впервые использую его. (Это может быть актуально)

Когда я запускаю приведенный выше код, я получаю ExceptionInInitializerError, вызванную UnsatisfiedLinkError: нет jnind4jcpu в java.library.path.

Это похоже на отсутствующую зависимость, но я понятия не имею, как это исправить.

Это мой pom.xml: https://pastebin.com/FzAMwA0z

И это моя полная трассировка стека: https://pastebin.com/a2kyUtch

Кстати, я использую IntelliJ с Java 1.8u101 на 64-битной Windows 10

3 ответа

Решение

Почему-то меняется dl4j.version с 0.8.1-SNAPSHOT до 0.8.0 это исправили. Все еще не уверен, почему, но это работает.

FWIW, keras здесь не проблема и не очень важна для этой трассировки стека. У вас плохие зависимости от вашего LD_LIBRARY_PATH где-то.

Если вы используете Windows, загляните в: https://github.com/bytedeco/javacpp-presets/wiki/Debugging-UnsatisfiedLinkError-on-Windows

Общая проблема - это MKL с анакондой. Если вы используете это, то другой обходной путь - установить пустой путь к библиотеке с помощью:

-Djava.library.path = ""

Вышеуказанное называется системным свойством. Установите это в своем конфиге времени выполнения, если он у вас есть.

Я не очень в dl4j. Но, несколько существующих перенаправлений на этот:

  1. Возможно, попробуйте указать классификатор для nd4j-native-platform как:

    <dependency>
         <groupId>org.nd4j</groupId>
         <artifactId>nd4j-native-platform</artifactId>
         <version>${dl4j.version}</version>
         <classifier>windows-x86_64</classifier>
    </dependency>
    
  2. Сборка с использованием maven-shade-plugin следующая конфигурация: https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/pom.xml#L160

  3. Или следуйте этому для:

Обходной путь состоит из:

изменение разрешения tmp изменение местоположения tmp.

Определите TMP, TMPDIR и TEMP в новом каталоге, добавьте -Djava.io.tmpdir=${TMPDIR} к команде java.

Связывание дополнительных источников для устранения неполадок и его вики.

Другие вопросы по тегам