hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

谁说搞Java的不能玩机械进修?

2019-11-18杂谈搜奇网46°c
A+ A-

简介

机械进修在环球范围内愈来愈受欢迎和运用。 它已彻底改变了某些应用程序的构建体式格局,而且能够会继承成为我们一样平常生活中一个庞大的(而且正在增添的)部份。
没有什么包装且机械进修并不简朴。 它对许多人来讲好像非常庞杂并经常令人生畏。
像谷歌如许的公司将本身的机械进修观点与开辟人员联系起来,在谷歌协助下让他们逐步迈出第一步,故TensorFlow的框架诞生了。

TensorFlow为何物?

TensorFlow是由谷歌运用Python和C++开辟的开源机械进修框架。
它能够协助开辟人员轻松猎取数据,预备和练习模子,展望将来状况,以及实行大规模机械进修。
有了它,我们能够练习和运转深度神经网络的内容,诸如光学字符识别,图像识别/分类,自然言语处置惩罚等。

张量与操纵

TensorFlow基于盘算图,你能够将其设想为具有节点和边的典范图。
每一个节点被称为操纵,它们将零个或多个张量输入并发生零个或多个张量输出。 操纵能够非常简朴,比方基础的增加,但它们也能够非常庞杂。
张量被描写为图的边沿,而且是中心数据单位。 当我们将它们供应给操纵时,我们在这些张量上实行差别的功用。 它们能够具有单个或多个维度,偶然也称为它们的品级(标量:品级0,向量:品级1,矩阵:品级2)。
这些数据遭到操纵的影响经由过程张量通报到盘算图中,故而称为TensorFlow。
张量能够以恣意数目的维度存储数据,而且有三种重要范例的张量:占位符,变量和常量。

装置TensorFlow

运用Maven,装置TensorFlow就像包含依靠项一样简朴:

<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>tensorflow</artifactId>
  <version>1.13.1</version>
</dependency>

假如你的装备支撑GPU功用,能够增加以下依靠:

<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>libtensorflow</artifactId>
  <version>1.13.1</version>
</dependency>

<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>libtensorflow_jni_gpu</artifactId>
  <version>1.13.1</version>
</dependency>

你能够运用TensorFlow对象来搜检当前操纵的TensorFlow的版本。

System.out.println(TensorFlow.version());

TensorFlow的JavaAPI

Java API TensorFlow供应包含在org.tensorflow包中。 它现在是实验性的,因而不能保证其稳定性。
须要注重的是TensorFlow唯一完整支撑的言语是Python,Java API险些没有什么功用。
API向我们引见了新的类,接口,罗列和非常。

经由过程API引入的新类是:

  • Graph:示意TensorFlow盘算的数据流图;
  • Operation:在Tensors上实行盘算的Graph节点;
  • OperationBuilder:Operations的构建器类;
  • Output :操纵发生的张量的标记句柄;
  • SavedModelBundle:示意从存储加载的模子;
  • SavedModelBundle.Loader:供应加载SavedModel的选项;
  • Server:历程内TensorFlow效劳器,用于分布式练习;
  • Session:图形实行的驱动程序;
  • Session.Run:输出实行会话时取得的张量和元数据;
  • Session.Runner:运转操纵并评价张量;
  • Shape:由操纵发生的能够部份已知的张量外形;
  • Tensor :静态范例的多维数组,其元素是由T形貌的范例;
  • TensorFlow:形貌TensorFlow运转时的静态实用程序要领;
  • Tensors:用于建立张量对象的范例平安工场要领;
罗列
  • DataType:将张量中的元素范例示意为罗列;
接口
  • Operand :由TensorFlow操纵的操纵数完成的接口;
非常
  • TensorFlowException:实行TensorFlow图时抛出的未经搜检的非常

假如我们将所有这些与Python中的tf模块举行比较将发明存在显著的区分。 Java API没有险些雷同的功用,最少现在云云。

图(Graphs)

如前所述,TensorFlow基于盘算图 - 个中org.tensorflow.Graph是Java的完成。
注重:它的实例是线程平安的,只管我们须要在完成它以后显式开释Graph运用的资本。

让我们从一个空图最先:

Graph graph = new Graph();

该对象是空的,所以这个图表意义不大。 要对它做任何操纵,我们起首须要运用Operations加载它。
我们运用opBuilder()要领来加载它,它返回一个OperationBuilder对象,一旦我们挪用.build()要领,它就会将操纵增加到我们的图形中。

常量

让我们在图表中增加一个常量:

Operation x = graph.opBuilder("Const", "x")
               .setAttr("dtype", DataType.FLOAT)
               .setAttr("value", Tensor.create(3.0f))
               .build(); 

占位符

占位符是变量的“范例”,声明时没有赋值,他们的值将在以后举行分派。 这许可我们运用没有任何现实数据的操纵来构建图形:

Operation y = graph.opBuilder("Placeholder", "y")
        .setAttr("dtype", DataType.FLOAT)
        .build();

函数

末了为了处理这个题目,我们须要增加某些函数。 这些能够像乘法,除法或加法一样简朴,也能够像矩阵乘法一样庞杂。 和之前一样,我们运用.opBuilder()要领定义函数:

Operation xy = graph.opBuilder("Mul", "xy")
  .addInput(x.output(0))
  .addInput(y.output(0))
  .build();  

注重:我们运用input(0)作为张量能够有多个输出。

图形可视化

遗憾的是,Java API还没有包含任何许可像Python中一样可视化图形的东西。

会话(Sessions)

如前所述,Session是Graph的驱动程序。 它封装了实行Operation和Graph盘算张量(tensors)的环境。
这意味着我们构建的图(graph)中的张量(tensors)现实上并没有任何值,由于我们没有在会话(session)中运转图形(graph)。
我们起首将图表增加到会话(session)中:

Session session = new Session(graph);

我们的操纵学问简朴地将x于y相乘,为了运转我们的图(graph)并获得盘算效果,我们须要运用fetch()猎取到xy的操纵并为其供应x和y的值:

Tensor tensor = session.runner().fetch("xy").feed("x", Tensor.create(5.0f)).feed("y", Tensor.create(2.0f)).run().get(0);
System.out.println(tensor.floatValue());

运转这段代码将发生的效果以下:

10.0f

Java当中加载Python中Saving模块

这能够听起来有点新鲜,但由于Python是唯一遭到优越支撑的言语,因而Java API依然没有保留模子的功用。
这意味着Java API仅用于效劳用例,最少在TensorFlow完整支撑之前。 现在最少我们能够运用SavedModelBundle类在Python中练习和保留模子,然后运用Java加载它们来为它们供应效劳:

SavedModelBundle model = SavedModelBundle.load("./model", "serve"); 
Tensor tensor = model.session().runner().fetch("xy").feed("x", Tensor.create(5.0f)).feed("y", Tensor.create(2.0f)).run().get(0);  

System.out.println(tensor.floatValue());

结论

TensorFlow是一个功用强大且普遍运用的框架。 它不断获得革新,并近来被引入新言语:包含Java和JavaScript。
只管Java API还没有像TensorFlow在Python中那么多的功用,但它依然能够作为向Java开辟人员引见TensorFlow的一个很好的最先。

原文链接:https://stackabuse.com/how-to-use-tensorflow-with-java/
作 者:David Landup
译 者:klein
------

9月福利,关注民众号

背景复兴:004,领取8月翻译集锦!

往期福利复兴:001,002, 003即可领取!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
谁说搞Java的不能玩机械进修?

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282348.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>