java调用python人工智能(Python 调用JAVA)

java调用python人工智能,原文标题:在Python中调用Java类,两位大仙强强联手了。让 Java 和 Python 携手合作非常容易,

java调用python人工智能,原文标题:在Python中调用Java类,两位大仙强强联手了。

java调用python人工智能(Python 调用JAVA)

让 Java 和 Python 携手合作非常容易,这在开发原型时尤其有价值。

我们从一个实现 Snake 游戏逻辑的 Java 程序开始:场上总有一块食物。每当蛇到达食物时,它就会生长并出现新的食物。如果蛇咬自己或咬墙,游戏结束。

我们的目标是训练一个神经网络来控制蛇,让蛇在犯错和游戏结束之前吃掉尽可能多的食物。首先,我们需要一个代表游戏当前状态的张量。它充当我们神经网络的输入,以便网络可以使用它来预测下一步要采取的最佳步骤。为了让这个例子简单,我们的张量只是一个包含七个元素的向量,可以是 1 或 0:前四个表示食物是在蛇的右边、左边、前面还是后面,接下来的三个条目表示如果蛇头的左边、前面和右边的田地都被一堵墙或蛇的尾巴挡住了。

我们示例的完整源代码可在 GitHub 上找到。

使用 JPype 导入Java类即可:

<b>import</b> jpype<b>import</b> jpype.<b>import</b>sfrom jpype.types <b>import</b> * # launch the JVMjpype.startJVM(classpath=['../target/autosnake-1.0-SNAPSHOT.jar']) # <b>import</b> the Java modulefrom me.schawe.autosnake <b>import</b> SnakeLogic # construct an object of the `SnakeLogic` <b>class</b> ...width, height = 10, 10snake_logic = SnakeLogic(width, height) # ... and call a method on itprint(snake_logic.trainingState())

JPype 在与 Python 解释器相同的进程中启动 JVM,并让它们使用 Java 本机接口 (JNI) 进行通信。

其他选项:

  • Jython 直接在 JVM 中执行 Python 解释器,这样 Python 和 Java 就可以非常高效地使用相同的数据结构。但这对使用原生 Python 库有一些缺点——因为我们将使用numpy和tensorflow,这对我们来说不是一个选择。
  • Py4J 处于频谱的另一侧。它在 Java 代码中启动一个套接字,它可以通过它与 Python 程序进行通信。优点是任意数量的 Python 进程可以连接到一个长时间运行的 Java 进程——或者相反,一个 Python 进程可以连接到多个 JVM,甚至通过网络。缺点是套接字通信的开销较大。

在 Java 中加载模型

使用deeplearning4j将训练好的模型加载到 Java 中……

<font><i>// https://deeplearning4j.konduit.ai/deeplearning4j/how-to-guides/keras-import</i></font><font><b>public</b> <b>class</b> Autopilot { ComputationGraph model; <b>public</b> Autopilot(String pathToModel) { <b>try</b> { model = KerasModelImport.importKerasModelAndWeights(pathToModel, false); } <b>catch</b> (Exception e) { e.printStackTrace(); } } </font><font><i>// infer the next move from the given state</i></font><font> <b>public</b> <b>int</b> nextMove(<b>boolean</b>[] state) { INDArray input = Nd4j.create(state).reshape(1, state.length); INDArray output = model.output(input)[0]; <b>int</b> action = output.ravel().argMax().getInt(0); <b>return</b> action; }}调用:<b>public</b> <b>class</b> SnakeLogic { Autopilot autopilot = <b>new</b> Autopilot(</font><font>"path/to/model.h5"</font><font>); <b>public</b> <b>void</b> update() { <b>int</b> action = autopilot.nextMove(trainingState()); turnRelative(action); </font><font><i>// rest of the update omitted</i></font><font> } </font><font><i>// further methods omitted</i></font><font>}</font> 本文《java调用python人工智能(Python 调用JAVA)》由网赚联盟( wangzhuan.org.cn )整理或原创,感谢您的阅读。

随机文章

SEO教程
站长导航
友情链接交换
搜素引擎算法
网站内容优化
GEO培训
SEO教程
友情链接交换

百度搜索“网赚联盟”即可找到本站,微信搜索“小小课堂网”关注小小课堂网公众号。网赚联盟( wangzhuan.org.cn )欢迎用户投稿,发布者:熬夜学Python的程序媛,文章版权归作者所有,投稿文章不代表网赚联盟立场,中二少年发布为网赚联盟原创文章,转载请注明出处:https://wangzhuan.org.cn/806814.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注