iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Java操作TensorFlow的方法
  • 101
分享到

使用Java操作TensorFlow的方法

Java操作TensorFlowJava使用TensorFlow 2023-05-19 17:05:51 101人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录简介Tensorflow为何物?张量与操作安装TensorFlowTensorFlow的Javaapi类枚举接口异常图(Graphs)常量占位符函数图形可视化会话(Session

简介

机器学习在全球范围内越来越受欢迎和使用。 它已经彻底改变了某些应用程序的构建方式,并且可能会继续成为我们日常生活中一个巨大的(并且正在增加的)部分。
没有什么包装且机器学习并不简单。 它对许多人来说似乎非常复杂并常常令人生畏。
像谷歌这样的公司将自己的机器学习概念与开发人员联系起来,在谷歌帮助下让他们逐渐迈出第一步,故TensorFlow的框架诞生了。

TensorFlow为何物?

TensorFlow是由谷歌使用Pythonc++开发的开源机器学习框架。
它可以帮助开发人员轻松获取数据,准备和训练模型,预测未来状态,以及执行大规模机器学习。
有了它,我们可以训练和运行深度神经网络的内容,诸如光学字符识别,图像识别/分类,自然语言处理等。

张量与操作

TensorFlow基于计算图,你可以将其想象为具有节点和边的经典图。
每个节点被称为操作,它们将零个或多个张量输入并产生零个或多个张量输出。 操作可以非常简单,例如基本的添加,但它们也可以非常复杂。
张量被描绘为图的边缘,并且是核心数据单元。 当我们将它们提供给操作时,我们在这些张量上执行不同的功能。 它们可以具有单个或多个维度,有时也称为它们的等级(标量:等级0,向量:等级1,矩阵:等级2)。
这些数据受到操作的影响通过张量传递到计算图中,故而称为TensorFlow。
张量可以以任意数量的维度存储数据,并且有三种主要类型的张量:占位符,变量和常量。

安装TensorFlow

使用Maven,安装TensorFlow就像包含依赖项一样简单:

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

如果你的设备支持GPU功能,可以添加以下依赖:

<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>libtensorflow</artifactId>
  <version>1.15.0</version>
</dependency>
<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>libtensorflow_jni_gpu</artifactId>
  <version>1.15.0</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的一个很好的开始。

到此这篇关于如何使用Java操作TensorFlow的文章就介绍到这了,更多相关Java操作TensorFlow内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 使用Java操作TensorFlow的方法

本文链接: https://www.lsjlt.com/news/213539.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Java操作TensorFlow的方法
    目录简介TensorFlow为何物?张量与操作安装TensorFlowTensorFlow的JavaAPI类枚举接口异常图(Graphs)常量占位符函数图形可视化会话(Session...
    99+
    2023-05-19
    Java操作TensorFlow Java使用TensorFlow
  • 使用Python、TensorFlow和Keras来进行垃圾分类的操作方法
    目录1. 数据准备2. 数据预处理3. 模型构建4. 模型训练5. 模型评估垃圾分类是现代城市中越来越重要的问题,通过垃圾分类可以有效地减少环境污染和资源浪费。 随着人工智能技术的发...
    99+
    2023-05-19
    Python垃圾分类 Python TensorFlow垃圾分类
  • TensorFlow和keras中GPU使用的设置操作
    1. 训练运行时候指定GPU 运行时候加一行代码: CUDA_VISIBLE_DEVICES=1 python train.py 2. 运行过程中按需或者定量分配GPU ten...
    99+
    2024-04-02
  • Java LocalDateTime常用操作方法
    Java8提供了新的时间接口LocalDateTime。本文主要介绍了Java8中LocalDateTime的一些常用操作方法。不多说,直接上代码。欲知详情,可以看看官网。 Loca...
    99+
    2024-04-02
  • 使用GO操作MongoDB的方法
    目录安装MongoDB驱动程序连接MongoDB列出所有数据库从MongDB中查询数据查询单个文档查询多个文档更新多个文档删除MongoDB文档获取MongoDB服务状态安装Mong...
    99+
    2024-04-02
  • java 日期操作的常用方法
    public String getMonthBegin(String strdate) { java.util.Date date = parseFormatDate(strdate); retur...
    99+
    2023-06-03
  • Java 8 中 Map 骚操作之 merge() 的使用方法
    Java 8 最大的特性无异于更多地面向函数,比如引入了lambda等,可以更好地进行函数式编程。前段时间无意间发现了map.merge()方法,感觉还是很好用的,此文简单做一些相关...
    99+
    2024-04-02
  • Java使用J4L识别验证码的操作方法
    1、首先要下载j4l的相应文件和jar 下载地址:http://www.java4less.com/ocrtools/ocrtools.phpinfo=download 百度网盘下载...
    99+
    2024-04-02
  • IDEA版使用Java操作Redis数据库的方法
    首先 下载 jedis.jar包 然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可 创建Java_Control_Redis类...
    99+
    2024-04-02
  • Java文件操作的方法
    这篇文章主要介绍“Java文件操作的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java文件操作的方法”文章能帮助大家解决问题。简介本程序主要采用了FileInputStream和FileOu...
    99+
    2023-06-30
  • Java使用apache poi操作excel的方式
    目录一.基本介绍1.1、Apache POI介绍1.2、HSSF和XSSF1.3、引入依赖二.利用poi库创建excel2.1、创建一个空excel2.2、简单演示写入excel内容...
    99+
    2024-04-02
  • MongoDB中使用JOIN操作的方法
    这篇文章给大家分享的是有关MongoDB中使用JOIN操作的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言MongoDB是由C++语言所编写的一种面向文档的非关系型数据库...
    99+
    2024-04-02
  • JAVA使用Ip2region获取IP定位信息的操作方法
    目录先安装依赖下载离线IP定位库下面我们定义类封装ip2region测试输出实际使用ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询 ip2regio...
    99+
    2024-04-02
  • 如何在pycharm中使用tensorflow的方法
    这篇文章将为大家详细讲解有关如何在pycharm中使用tensorflow的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求:需要在pycharm中跑一个深度学习的项目但是tensorflow包导不...
    99+
    2023-06-25
  • 教你在pycharm中使用tensorflow的方法
    需求: 需要在pycharm中跑一个深度学习的项目 但是tensorflow包导不入 问题分析: 当前使用的是anaconda的3.8版本,无法正常下载tensorflow包,需...
    99+
    2024-04-02
  • flutter操作excel表的库使用方法
    推荐库 spreadsheet_decoderexcel 方案一:spreadsheet_decoder 加入依赖 dependencies: flutter: sdk: flutter spreadsheet_decoder: ...
    99+
    2023-08-17
    flutter excel
  • 使用Grafana监控Redis的操作方法
    目录Grafana简介Prometheus简介安装使用监控系统信息监控SpringBoot应用总结参考资料项目源码地址当面对一个复杂的系统时,我们往往需要监控工具来帮助我们解决一些性...
    99+
    2024-04-02
  • Java中操作Redis的详细方法
    目录1.准备操作 1.1新建工程1.2sca-jedis工程依赖1.3sca-tempalte工程依赖1.4测试是否可以连接Redis1.5修改redis.conf文件2....
    99+
    2024-04-02
  • Java使用wait() notify()方法操作共享资源详解
    Java多个线程共享资源;  1)wait()、notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写。  2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即...
    99+
    2023-05-31
    java 共享
  • pycharm怎么使用numpy_pycharm使用numpy的操作方法
    首先,点击pycharm左上方的file。 然后再出现的方框中点击settings。 此时会出现一个窗口,点击图中画方框的部分。 再看向窗口的右侧,点击圆圈中的加号。 在出现的搜索...
    99+
    2024-05-10
    pycharm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作