我使用后端(遵循深水小册子 MNIST示例)构建了一个TensorFlow H2O深水模型。
(首先,我对一个H2O GBM模型做了同样的工作,以验证它在一般情况下工作,而不依赖于我的应用程序中的深水依赖项。(这很管用。)
我下载了我的深水TensorFlow模型(我是用Python构建的):
modelfile = model.download_mojo(path="/h2o_testdata/generatedModels", get_genmodel_jar=True)我觉得这一步又起作用了。现在,我想在我的Java应用程序中使用模型zip文件:
我在我的项目中添加了依赖项(通过Maven添加了依赖项(h2o-genmodel.jar ),通过复制和粘贴添加了深水-all.jar,因为我在Maven上找不到它)。似乎需要添加一些附加的依赖项或源代码来添加/应用TensorFlow‘后端’(不确定‘后端’在这里意味着什么,因为我只想在这里进行推断,而不是模型培训)?
我实例化了模型:
EasyPredictModelWrapper model = new EasyPredictModelWrapper(MojoModel.load("src/main/resources/generatedModels/DeepWater_model_python_1503388273301_1.zip"));这是一个例外:
java.lang.UnsatisfiedLinkError: /private/var/folders/0s/0xdkb9n12yqdb3fs71926z3c0000gp/T/libtensorflow_jni.so147ba98b-e7e3-49bb-8d4e-e5a06efd7a66: dlopen(/private/var/folders/0s/0xdkb9n12yqdb3fs71926z3c0000gp/T/libtensorflow_jni.so147ba98b-e7e3-49bb-8d4e-e5a06efd7a66, 1): no suitable image found. Did find:
/private/var/folders/0s/0xdkb9n12yqdb3fs71926z3c0000gp/T/libtensorflow_jni.so147ba98b-e7e3-49bb-8d4e-e5a06efd7a66: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00
/private/var/folders/0s/0xdkb9n12yqdb3fs71926z3c0000gp/T/libtensorflow_jni.so147ba98b-e7e3-49bb-8d4e-e5a06efd7a66: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at deepwater.backends.tensorflow.LibraryLoader.loadNativeLib(LibraryLoader.java:87)
at deepwater.backends.tensorflow.TensorflowBackend.<clinit>(TensorflowBackend.java:30)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at hex.genmodel.algos.deepwater.DeepwaterMojoModel.createDeepWaterBackend(DeepwaterMojoModel.java:96)
at hex.genmodel.algos.deepwater.DeepwaterMojoReader.readModelData(DeepwaterMojoReader.java:31)
at hex.genmodel.ModelMojoReader.readAll(ModelMojoReader.java:143)
at hex.genmodel.ModelMojoReader.readFrom(ModelMojoReader.java:34)
at hex.genmodel.MojoModel.load(MojoModel.java:35)
at com.github.megachucky.kafka.streams.machinelearning.Kafka_Streams_Deep_Learning_H2O_MNIST.main(Kafka_Streams_Deep_Learning_H2O_MNIST.java:15)
Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot find TensorFlow native library for OS: darwin, architecture: x86_64. See https://github.com/tensorflow/tensorflow/tree/master/java/README.md for possible solutions (such as building the library from source).
at org.tensorflow.NativeLibrary.load(NativeLibrary.java:66)
at org.tensorflow.TensorFlow.init(TensorFlow.java:27)
at org.tensorflow.TensorFlow.<clinit>(TensorFlow.java:31)
at org.tensorflow.Graph.<clinit>(Graph.java:194)
at deepwater.backends.tensorflow.models.ModelFactory.readMetaGraph(ModelFactory.java:143)
at deepwater.backends.tensorflow.models.ModelFactory.LoadModelFromFile(ModelFactory.java:220)
at deepwater.backends.tensorflow.TensorflowBackend.buildNet(TensorflowBackend.java:74)
at hex.genmodel.algos.deepwater.DeepwaterMojoReader.readModelData(DeepwaterMojoReader.java:64)
at hex.genmodel.ModelMojoReader.readAll(ModelMojoReader.java:143)
at hex.genmodel.ModelMojoReader.readFrom(ModelMojoReader.java:34)
at hex.genmodel.MojoModel.load(MojoModel.java:35)
at com.github.megachucky.kafka.streams.machinelearning.Kafka_Streams_Deep_Learning_H2O_MNIST.main(Kafka_Streams_Deep_Learning_H2O_MNIST.java:15)我找不到任何关于如何设置这个的文档,所以也许有人能帮上忙?还是我也需要在我的笔记本电脑上安装TensorFlow?我认为这在H2O中没有必要,因为它“只是生成H2O代码”,我可以在一个应用程序中使用它--类似于其他非深水H2O模型?
顺便问一句,附带的问题是:我如何通过Maven依赖获得深水-all.jar?我找不到它。
发布于 2017-08-22 12:00:13
我只能回答你的第二个问题。您不应该将.jars复制到Maven项目中。您需要将它们安装到本地存储库中并将依赖项添加到pom.xml中。(您可以选择您想要的作为工件和组。框架的供应商将是一个很好的选择)
发布于 2017-08-23 01:52:01
您不能使用Maven h2o-genmodel.jar. can。您必须使用来自您正在使用的H2O的h2o-genmodel.jar . use。深水-all.jar也是如此。它必须来自同一个H2O。you包含您所需的所有代码,包括后端。
由于您使用了参数get_genmodel_jar=True,所以您下载了与mojo同时的参数。这是你必须使用的。
https://stackoverflow.com/questions/45816896
复制相似问题