3

我正在尝试从 Windows 10 Home 上的 ColdFusion 2016 开发人员版调用 TensorFlow Java API。

我从 TensorFlow Readme.md中获得了线索,它除了使用 jar 之外,还使用了特定于平台的 JNI dll,所以我这样设置我的测试: <cfscript> CreateObject("java","java.lang.System").load("C:\\absolutepath\\tensorflow_jni.dll"); variables.tensorflow = CreateObject("Java","org.tensorflow.TensorFlow"); WriteDump(variables.tensorflow); WriteOutput("I'm running TensorFlow version: " & variables.tensorflow.version()); </cfscript>

当我看到对象的 WriteDump 时,我以为这将是小菜一碟:在此处输入图像描述

但是对 version() 的调用只会让浏览器旋转。

应用程序日志显示以下错误: Could not initialize class org.tensorflow.TensorFlow The specific sequence of files included or processed is: C:\ColdFusionBuilder2016\ColdFusion\cfusion\wwwroot\CF_TensorFlow\index.cfm, line: 5

JNI 似乎正在加载...当它没有加载时,错误消息非常明确“找不到适用于 OS 的 TensorFlow 本机库:windows...”

我现在不确定该怎么做。我需要对 Java 源代码做些什么以使其与 CF 很好地配合使用吗?

4

1 回答 1

2

您可能已经知道,该库首先在标准位置搜索 DLL。因此,将路径或文件添加到这些位置之一(然后重新启动 CF)肯定会起作用:

  • 将 DLL 路径添加到java.library.path
  • 将DLL文件复制到jre\bin目录

查看源代码和评论,显然 DLL 也可以捆绑TensorFlow jar 本身中。确切的路径是特定于操作系统的:

private static String makeResourceName() {
    return "org/tensorflow/native/"
        + String.format("%s-%s/", os(), architecture())
        + System.mapLibraryName(LIBNAME);
}

因此,不要使用System.load(),而是打开 jar 并将 DLL 复制到相应的文件夹中。对于 Windows 64 位,预期路径是org/tensorflow/native/windows-x86_64/tensorflow_jni.dll.

libtensorflow-1.1.0-rc2-with-dll.jar 

  |-- META-INF
  |-- org    
      |-- tensorflow    
          |-- TensorFlow.class
          |-- ... 
          |-- native 
              |-- windows-x86_64
                  |-- tensorflow_jni.dll
于 2017-04-30T04:47:18.203 回答