ошибка загрузки модели keras с использованием DL4j: «nn.modelimport.keras.Hdf5Archive: неожиданный конец ввода в / между записями OBJECT» - PullRequest
1 голос
/ 31 марта 2020

Я использую модель DL, обученную с керас и тензорным потоком (сохранено в файл h5). в пружинном багажнике микросервис также докернизирован.

Мне нужна помощь для устранения этой ошибки, когда я пытаюсь запустить образ docker с помощью этой службы весенней загрузки, вызывая модель keras с использованием библиотеки dl4j:

introducir la descripción de la imagen aquí

Пом. xml является следующим:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.autentia</groupId>
<artifactId>micro-service-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>micro-service-spring-boot</name>
<description>Demo project microservice with Spring Boot and Docker</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.M3</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <docker.image.prefix>curso</docker.image.prefix>
           <nd4j.version>1.0.0-beta2</nd4j.version>
            <dl4j.version>1.0.0-beta2</dl4j.version>
</properties>
<dependencies>
  <dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
  </dependency>  
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
  <dependency>      
    <groupId>org.deeplearning4j</groupId>      
    <artifactId>deeplearning4j-core</artifactId>
    <version>1.0.0-beta2</version>    
    </dependency>         
    <dependency>      
      <groupId>org.deeplearning4j</groupId>      
      <artifactId>deeplearning4j-modelimport</artifactId>      
      <version>1.0.0-beta2</version>    
    </dependency>                       
    <dependency>      
      <groupId>org.nd4j</groupId>      
      <artifactId>nd4j-native-platform</artifactId>
      <version>1.0.0-beta2</version>    
    </dependency>
    <dependency>      
      <groupId>org.eclipse.jetty</groupId>      
      <artifactId>jetty-server</artifactId>      
      <version>9.4.9.v20180320</version>   
    </dependency>  
    <dependency>      
      <groupId>com.google.cloud.dataflow</groupId>      
      <artifactId>google-cloud-dataflow-java-sdk-all</artifactId>  
      <version>2.2.0</version>     
    </dependency>
  </dependencies>
  <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.10</version>
            <configuration>
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                <dockerDirectory>src/main/docker</dockerDirectory>
                <serverId>docker-hub</serverId>
                <registryUrl>https://index.docker.io/v1/</registryUrl>
                <forceTags>true</forceTags>
                <imageTags>
                    <imageTag>${project.version}</imageTag>
                </imageTags>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
            <executions>
                <execution>
                    <id>build-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
                <execution>
                    <id>push-image</id>
                    <phase>install</phase>
                    <goals>
                        <goal>push</goal>
                    </goals>
                    <configuration>
                        <imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
                    </configuration>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

И код:

package com.EjemplosEva;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.InetAddress;

import org.deeplearning4j.nn.modelimport.keras.KerasModelImport;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.io.ClassPathResource;
import org.deeplearning4j.nn.modelimport.keras.Hdf5Archive;
import org.deeplearning4j.nn.modelimport.keras.*;

@RestController

public class GuestbookController {
  @RequestMapping(value = "/micro-service")

  public String hello() throws Exception {
      // load the model
      final MultiLayerNetwork model;
            try {
                String simpleMlp = new ClassPathResource("modelLstm.h5").getFile().getPath();
                System.out.println("File opened\n");
                model = KerasModelImport.importKerasSequentialModelAndWeights(simpleMlp);
                System.out.println("Fichero imported\n");
            }
            catch (Exception e) {
                throw new RuntimeException(e);
            }
      return ("Hello world first step finished");
  }

}

Я проверил это с несколькими версиями dl4j, но проблема все еще возникает.

Кто-нибудь может мне помочь?

Спасибо!

1 Ответ

0 голосов
/ 31 марта 2020

На скриншоте две проблемы:

  1. Похоже, что у него проблемы с чтением самого файла h5
  2. Невозможно преобразовать хэш-карту в список

Вторая проблема указывает на то, что все, что он мог прочитать, не соответствует ожидаемому. Я полагаю, вы используете tf.keras, а не автономную версию Keras, верно?

К сожалению, начиная с версии 1.0.0-beta6, deeplearning4j не поддерживает импорт моделей, созданных с помощью tf.keras.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...