精华内容
下载资源
问答
  • 算法同学通常会利用python做tensorflow深度学习模型的训练和测试,但当离线模型训练好之后,往往需要将模型部署上线,将其...JAVA API 参考文档:注意:TensorFlow Java API 本质上是用Java封装了C++的动态库,而且J...

    算法同学通常会利用python做tensorflow深度学习模型的训练和测试,但当离线模型训练好之后,往往需要将模型部署上线,将其应用到web端或app应用调用,甚至分布式任务使用等等。

    本文将介绍一下,如何利用java加载tensorflow的pb模型,实现模型的在线推理和预测。

    JAVA API 参考文档:

    注意:TensorFlow Java API 本质上是用Java封装了C++的动态库,而且Java API不在 TensorFlow API 稳定性保障的涵盖范围内。

    1、环境搭建

    目前java引擎的开发通常会使用maven进行jar包管理,首先需要在pom.xml中添加以下依赖以加载对应jar包。

    Ps:至于java 的tensorflow的版本,要和python训练时用的tensorflow的版本一致。

    depandency方法1:

    org.tensorflow

    tensorflow

    1.15.0

    depandency方法2:

    org.tensorflow

    libtensorflow

    1.15.0

    org.tensorflow

    proto

    1.15.0

    org.tensorflow

    libtensorflow_jni

    1.15.0

    2、Java加载tensorflow模型

    /**

    * @author lzhenboy

    * @date 2020-01-02

    */

    import org.ansj.domain.Term;

    import org.tensorflow.SavedModelBundle;

    import org.tensorflow.Session;

    import org.tensorflow.Tensor;

    import java.nio.charset.StandardCharsets;

    import java.util.List;

    /**

    * Tensorflow pb模型加载 & 预测

    */

    public class TfModelLoader {

    private final Session session;

    public TfModelLoader(String modelPath, String modelTag) {

    SavedModelBundle modelBundle = SavedModelBundle.load(modelPath, modelTag);

    this.session = modelBundle.session();

    }

    public TfModelLoader(String modelPath) {

    SavedModelBundle modelBundle = SavedModelBundle.load(modelPath, "serve");

    this.session = modelBundle.session();

    }

    public float[] predict(List terms) {

    int termSize = terms.size();

    byte[][][] wordsBytes = new byte[1][termSize][];

    int[] nwords = new int[]{wordsBytes[0].length};

    for (int i = 0; i < termSize; ++i) {

    byte[] nameBytes = terms.get(i).getName().getBytes(StandardCharsets.UTF_8);

    wordsBytes[0][i] = nameBytes;

    }

    Tensor> wordsTensor = Tensor.create(wordsBytes);

    Tensor> nwordsTensor = Tensor.create(nwords);

    Tensor> result = session.runner()

    .feed("words", wordsTensor)

    .feed("nwords", nwordsTensor)

    .fetch("predict").run().get(0);

    float[][] preds = new float[1][wordsBytes[0].length];

    result.copyTo(preds);

    // Tensor Close

    wordsTensor.close();

    nwordsTensor.close();

    result.close();

    return preds[0];

    }

    }

    需要注意的是,参与计算的tensor都要close,以防止内存泄漏(tensorflow底层代码是c++实现,内存管理不受java控制,因此需要人工close)。

    3、使用saved_model_cli

    如果你使用的是别人的模型,或者你想通过pb模型文件快速查看模型的输出输出标签,saved_model_cli提供了通过命令行检查并恢复模型的快捷方式,可以通过如下方式检查该模型的相关信息:

    saved_model_cli show --dir=graph_dir --all

    eg:

    saved_model_cli show --dir ./saved_model/1604666267 --all

    结果如下:

    d2dfb80f96b0

    saved_model_cli.png

    从上图可以看出:

    模型的tag为serve

    模型input_placeholder为:(1) word (2) nword

    模型output为:logits

    参考文献

    展开全文
  • 展开全部tensorflow训练模型通常使用Pythonapi编写,这些模型保存后可32313133353236313431303231363533e78988e69d8331333363373737以在Java中调用。python中训练完成,模型保存使用如下api保存:#保存二进制模型...

    展开全部

    tensorflow训练模型通常使用Python api编写,这些模型保存后可32313133353236313431303231363533e78988e69d8331333363373737以在Java中调用。

    python中训练完成,模型保存使用如下api保存:# 保存二进制模型

    output_graph_def = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, output_node_names=['y_conv_add'])

    with tf.gfile.FastGFile('/logs/mnist.pb', mode='wb') as f:

    f.write(output_graph_def.SerializeToString())

    保存为二进制pb文件,主要的点是output_node_names数组,该数据的名称表示需要保存的tensorflow tensor名。既是在python中定义模型时指定的计算操作的name。填写什么就保存到什么节点。在cnn模型中,通常是分类输出的名称。

    例如模型定义时代码为:y_conv = tf.add(tf.matmul(h_fc1_drop, W_fc2), b_fc2, name='y_conv_add') # cnn输出层,名称y_conv_add

    # 训练和评价模型

    softmax = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv)

    模型在java中使用需要关心模型输入tensor和输出tensor名,所以定义模型时,所有的输入tensor最好指定名称,如输入x和dropout名。

    java中调用代码片段:public static void main(String[] args) {

    String labels = "17,16,7,8,3,15,4,14,2,5,12,18,9,10,1,11,13,6";

    TensorFlowInferenceInterface tfi = new TensorFlowInferenceInterface("D:/tf_mode/output_graph.pb","imageType");

    final Operation operation = tfi.graphOperation("y_conv_add");

    Output output = operation.output(0);

    Shape shape = output.shape();

    final int numClasses = (int) shape.size(1);

    float[] floatValues = getImagePixel("D:/tf_mode/ci/ci/333.jpg"); //将图片处理为输入对应张量格式

    // 输入图片

    tfi.feed("x_input", floatValues, 1, 2048); //将数据复制给输入张量x_input即为模型定义时的x名称

    tfi.run(new String[] { "y_conv_add" }, false);//输出张量

    float[] outPuts = new float[numClasses];//结果分类

    tfi.fetch("y_conv_add", outPuts);//接收结果 outPuts保存的即为预测结果对应的概率,最大的一个通常为本次预测结果

    展开全文
  • java中调用训练好的TensorFlow模型

    万次阅读 2019-02-26 12:48:39
    java中调用训练好的TensorFlow模型 当我们训练好TensorFlow模型以后,我们往往都是需要投入实际使用的,在实际使用的时候,我们不可能先训练,后处理,因为训练的代价实在是太大了。本文主要讲解如何将训练好的...

    在java中调用训练好的TensorFlow模型

    当我们训练好TensorFlow模型以后,我们往往都是需要投入实际使用的,在实际使用的时候,我们不可能先训练,后处理,因为训练的代价实在是太大了。本文主要讲解如何将训练好的tensorFlow模型保存成.pb格式的文档,并在java项目中运用。
    • 保存模型
    • 在java中调用

    先来解决第一个问题,如何保存为pb格式,其实这是非常简单的,只需要3行代码即可。

    builder = tf.saved_model.builder.SavedModelBuilder('./model2')
    # SavedModelBuilder里面放的是你想要保存的路径,比如我的路径是根目录下的model2文件
    builder.add_meta_graph_and_variables(session, ["mytag"])
    #第二步必需要有,它是给你的模型贴上一个标签,这样再次调用的时候就可以根据标签来找。我给它起的标签名是"mytag",你也可以起别的名字,不过你需要记住你起的名字是什么。
    builder.save()
    #第3步是保存操作
    

    其实第一个问题还没有解决,如果你直接这样保存的话,你在调用的时候可能就找不到输入和输出了。所以你需要在你的代码里给你的输入和输出变量起个名字,这样去java里面,你就可以根据这个名字来获得你的输入输出变量。
    如果你没有理解我这段话,你就看下面这个例子。

    X_holder = tf.placeholder(tf.int32,[None,None],name='input_x') # 训练集
    predict_Y = tf.nn.softmax(softmax_before,name='predict') # softmax() 计算概率
    #就拿我的案例来说,我的输入是一个二维矩阵,我给它起名为"input_x",这样到了java中我就可以根据"input_x"来得到x_hodler
    #同理,我的输出是一个softmax(),所以我给它起名为"predict"。
    #其他变量我们是不用考虑的,因为我们训练模型的目的就是给输入,得到输出。
    

    好了,现在第一个问题解决了。现在来解决如何在java中调用的问题。

    1. 先在maven的pom.xml中引入tensorflow的包。我的包是这样的
      <dependency>
               <groupId>org.tensorflow</groupId>
               <artifactId>libtensorflow</artifactId>
               <version>1.12.0</version>
           </dependency>
           <dependency>
               <groupId>org.tensorflow</groupId>
               <artifactId>proto</artifactId>
               <version>1.12.0</version>
           </dependency>
           <dependency>
               <groupId>org.tensorflow</groupId>
               <artifactId>libtensorflow_jni</artifactId>
               <version>1.12.0</version>
           </dependency>
      
      千万不要直接复制我的代码,因为你训练时使用的tensorflow版本不一定是1.12.0.
      所以你需要去python里看看你的TensorFlow版本是多少。方法如下:
      import tensorflow as tf
      tf.__version__
      
      得到你的版块以后,将version换一下就行。

    接下来你就可以直接复制代码了。

    import org.tensorflow.*;
     SavedModelBundle b = SavedModelBundle.load("./src/main/resources/model2", "mytag"); 
     //.load首先需要的是你打包好的.pb文件所在的目录,其次是刚刚你定义的标签名称
          Session tfSession = b.session(); 
          Operation operationPredict = b.graph().operation("predict");   //要执行的op,根据名字找到输出
          Output output = new Output(operationPredict, 0);
          Tensor input_X = Tensor.create(input);
          //这里的input我没有给出定义,因为这取决于你的模型,这里它是一个二维数组,因为我们模型输入就是一个二维数据,我们需要将二维数组转化为tensor变量
          Tensor out= tfSession.runner().feed("input_x",input_X).fetch(output).run().get(0);//输入
          //后面的代码不一定一样,取决于你的训练模型本身
          System.out.println(out);
          float [][] ans = new float[1][10];
          out.copyTo(ans);//将tensor里面的数据copy给一个数组
    

    算了,我还是把我的全部代码贴出了吧,这样看起来比较直观一些。

    package com.example.demo.tf;
    
    /**
     * @ClassName Read
     * @Description TODO
     * @Auther ydc
     * @Date 2019/2/12 8:21
     * @Version 1.0
     **/
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import  java.math.*;
    import java.util.Random;
    import org.tensorflow.*;
    public class Read {
    
        private static final Integer ONE = 1;
    
        public static void main(String[] args) {
            Map<String, Integer> map = new HashMap<String, Integer>();
            Map<Integer,String> mp = new HashMap<>();
            mp.put(0,"体育");
            mp.put(1,"娱乐");
            mp.put(2,"家居");
            mp.put(3,"房产");
            mp.put(4,"教育");
            mp.put(5,"时尚");
            mp.put(6,"时政");
            mp.put(7,"游戏");
            mp.put(8,"科技");
            mp.put(9,"财经");
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("./src/main/resources/data/vocab.txt")),
                        "UTF-8"));
                String lineTxt = null;
                int idx =0 ;
                while ((lineTxt = br.readLine()) != null) {
                    map.put(lineTxt,idx);
                    idx++;
                }
                br.close();
            } catch (Exception e) {
                System.err.println("read errors :" + e);
            }
            int input [][] =new int[1][600];
            int max=1000;
            int min=1;
            Random random = new Random();
            for(int i=0;i<1;i++){
                for(int j=0;j<600;j++){
                   // input[i][j]=random.nextInt(max)%(max-min+1) + min;
                    input[i][j]=0;
                }
            }
    
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("./src/main/resources/data/test.txt")),
                        "utf-8"));
                String lineTxt = null;
                int idx =0 ;
                while ((lineTxt = br.readLine()) != null) {
                    int sz =lineTxt.length();
                    System.out.println(lineTxt);
                    for(int k=0;k<1;k++) {
                        for (int i = 0; i < sz; i++) {
                            String tmp = String.valueOf(lineTxt.charAt(i));
                            //System.out.print(tmp+" ");
                            if(map.get(tmp)==null){
                                System.out.println(tmp);
                                continue;
                            }
                            input[k][i] = map.get(tmp);
                        }
                    }
                }
                br.close();
            } catch (Exception e) {
                System.err.println("read errors :" + e);
            }
            for(int i=0;i<600;i++){
                System.out.print(input[0][i]+" " );
                if(i%100==0){
                    System.out.println();
                }
            }
            SavedModelBundle b = SavedModelBundle.load("./src/main/resources/model2", "mytag");
            Session tfSession = b.session();
            Operation operationPredict = b.graph().operation("predict");   //要执行的op
            Output output = new Output(operationPredict, 0);
            Tensor input_X = Tensor.create(input);
            Tensor out= tfSession.runner().feed("input_x",input_X).fetch(output).run().get(0);
            System.out.println(out);
            float [][] ans = new float[1][10];
            out.copyTo(ans);
            float M=0;
            int index1=0;
            index1 =getMax(ans[0]);
            System.out.println(index1);
            System.out.println("------");
            System.out.println(mp.get(index1));
    
            //System.out.println(mp.get(getMax(ans[1])));
        }
    
        public static int getMax(float[] a){
            float M=0;
            int index2=0;
            for(int i=0;i<10;i++){
                if(a[i]>M){
                    M=a[i];
                    index2=i;
                }
            }
            return index2;
        }
    
    }
    

    项目演示

    展开全文
  • Java调用Keras、Tensorflow模型

    千次阅读 2018-11-07 17:32:18
    目前深度学习主流使用python训练自己的模型,有非常多的框架提供了能快速搭建神经网络的功能,其中Keras提供了high-level的语法,底层可以使用tensorflow或者theano。 但是有很多公司后台应用是用Java开发的,如果...

     

    实现python离线训练模型,Java在线预测部署。查看原文

    目前深度学习主流使用python训练自己的模型,有非常多的框架提供了能快速搭建神经网络的功能,其中Keras提供了high-level的语法,底层可以使用tensorflow或者theano。

    但是有很多公司后台应用是用Java开发的,如果用python提供HTTP接口,对业务延迟要求比较高的话,仍然会有一定得延迟,所以能不能使用Java调用模型,python可以离线的训练模型?(tensorflow也提供了成熟的部署方案TensorFlow Serving

    手头上有一个用Keras训练的模型,网上关于Java调用Keras模型的资料不是很多,而且大部分是重复的,并且也没有讲的很详细。大致有两种方案,一种是基于Java的深度学习库导入Keras模型实现,另外一种是用tensorflow提供的Java接口调用。

    Deeplearning4J

    Eclipse Deeplearning4j is the first commercial-grade, open-source, distributed deep-learning library written for Java and Scala. Integrated with Hadoop and Spark, DL4J brings AIAI to business environments for use on distributed GPUs and CPUs.

    Deeplearning4j目前支持导入Keras训练的模型,并且提供了类似python中numpy的一些功能,更方便地处理结构化的数据。遗憾的是,Deeplearning4j现在只覆盖了Keras <2.0版本的大部分Layer,如果你是用Keras 2.0以上的版本,在导入模型的时候可能会报错。

    了解更多:
    Keras Model Import: Supported Features
    Importing Models From Keras to Deeplearning4j

    Tensorflow

    文档,Java的文档很少,不过调用模型的过程也很简单。采用这种方式调用模型需要先将Keras导出的模型转成tensorflow的protobuf协议的模型。

    1、Keras的h5模型转为pb模型

    在Keras中使用model.save(model.h5)保存当前模型为HDF5格式的文件中。
    Keras的后端框架使用的是tensorflow,所以先把模型导出为pb模型。在Java中只需要调用模型进行预测,所以将当前的graph中的Variable全部变成Constant,并且使用训练后的weight。以下是freeze graph的代码:

        def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True):
            """
            :param session: 需要转换的tensorflow的session
            :param keep_var_names:需要保留的variable,默认全部转换constant
            :param output_names:output的名字
            :param clear_devices:是否移除设备指令以获得更好的可移植性
            :return:
            """
            from tensorflow.python.framework.graph_util import convert_variables_to_constants
            graph = session.graph
            with graph.as_default():
                freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or []))
                output_names = output_names or []
                # 如果指定了output名字,则复制一个新的Tensor,并且以指定的名字命名
                if len(output_names) > 0:
                    for i in range(output_names):
                        # 当前graph中复制一个新的Tensor,指定名字
                        tf.identity(model.model.outputs[i], name=output_names[i])
                output_names += [v.op.name for v in tf.global_variables()]
                input_graph_def = graph.as_graph_def()
                if clear_devices:
                    for node in input_graph_def.node:
                        node.device = ""
                frozen_graph = convert_variables_to_constants(session, input_graph_def,
                                                              output_names, freeze_var_names)
                return frozen_graph
    

    该方法可以将tensor为Variable的graph全部转为constant并且使用训练后的weight。注意output_name比较重要,后面Java调用模型的时候会用到。

    在Keras中,模型是这么定义的:

        def create_model(self):
            input_tensor = Input(shape=(self.maxlen,), name="input")
            x = Embedding(len(self.text2id) + 1, 200)(input_tensor)
            x = Bidirectional(LSTM(128))(x)
            x = Dense(256, activation="relu")(x)
            x = Dropout(self.dropout)(x)
            x = Dense(len(self.id2class), activation='softmax', name="output_softmax")(x)
            model = Model(inputs=input_tensor, outputs=x)
            model.compile(loss='categorical_crossentropy',
                          optimizer='adam',
                          metrics=['accuracy'])
    

    下面的代码可以查看定义好的Keras模型的输入、输出的name,这对之后Java调用有帮助。

    print(model.input.op.name)
    print(model.output.op.name)
    

    训练好Keras模型后,转换为pb模型:

    from keras import backend as K
    import tensorflow as tf
    
    model.load_model("model.h5")
    print(model.input.op.name)
    print(model.output.op.name)
    # 自定义output_names
    frozen_graph = freeze_session(K.get_session(), output_names=["output"])
    tf.train.write_graph(frozen_graph, "./", "model.pb", as_text=False)
    
    ### 输出:
    # input
    # output_softmax/Softmax
    # 如果不自定义output_name,则生成的pb模型的output_name为output_softmax/Softmax,如果自定义则以自定义名为output_name
    

    运行之后会生成model.pb的模型,这将是之后调用的模型。

    2、Java调用

    新建一个maven项目,pom里面导入tensorflow包:

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

    核心代码:

    public void predict() throws Exception {
            try (Graph graph = new Graph()) {
                graph.importGraphDef(Files.readAllBytes(Paths.get(
                        "path/to/model.pb"
                )));
                try (Session sess = new Session(graph)) {
                    // 自己构造一个输入
                    float[][] input = {{56, 632, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
                    try (Tensor x = Tensor.create(input);
                        // input是输入的name,output是输出的name
                        Tensor y = sess.runner().feed("input", x).fetch("output").run().get(0)) {
                        float[][] result = new float[1][y.shape[1]];
                        y.copyTo(result);
                        System.out.println(Arrays.toString(y.shape()));
                        System.out.println(Arrays.toString(result[0]));
                    }
                }
            }
        }
    

    Graph和Tensor对象都是需要通过close()方法显式地释放占用的资源,代码中使用了try-with-resources的方法实现的。

    至此,已经可以实现Keras离线训练,Java在线预测的功能。

    展开全文
  • 训练的网络见上篇博客 Tensorflow 直接对验证码进行3通道卷积后识别 对于这上篇博客的网络稍作修改,利于Java调用 import tensorflow as tf import numpy as np from PIL import Image import os ...
  • python程序读取tensorflow模型和词向量模型。 我的java程序是一个web,的spring框架。 没用java程序的调用的时候,python程序可以正常运行 调用过后,python中的saver=tf.train.Saver()报错 显示...
  • JavaTensorFlow

    千次阅读 2019-04-22 10:29:10
    TensorFlow 提供了一个Java API,该 API 特别适合加载 Python 创建的模型并在 Java 应用中运行这些模型JAVA API 参考文档: ...
  • 本文主要实现用JAVA接口调用tensorflow模型进行推理。相关源码见链接 引言 本文为系列博客tensorflow模型部署系列的一部分,用于JAVA语言实现通用模型的部署。本文主要使用pb格式的模型文件,其它格式的模型文件请...
  • java web端调用tensorflow模型

    千次阅读 2017-10-20 15:15:26
    公司想做个web端的识别功能,可网上例子很少,官网可以找到例子:java代码  不过拿来可能会出现问题,我们web端的是1.3.0可是官网已经是1.4.0了,代码又不一样了。。。为什么要说又 可以通过下载老版本的源码...
  • java读取tensorflow中图像的分类模型

    千次阅读 热门讨论 2017-11-07 19:57:46
    经常在tensorflow中训练的图像模型,实际部署常见的的是c++,实际java中也可以部署,在图像分类中,图像的预处理较为简单,只要做去均值和方差话(归一化),就可以使用,上午刚刚跟同事跑通了色情模型, ...
  • 一个是GRU模型,这两个模型在GPU服务器上训练好了,然后需要使用Java调用这两个模型,CNN+LSTM使用TensorFlow写的,GRU是Keras写的,所以需要用Java部署TensorFlow和Keras训练好的深度学习模型。关于这方面的内容...
  • 在上面一章节提到怎么在java中怎么调用tensorflow训练好的模型,这篇主要是部署成service代码,看看吧,还有个东西官方说要jdk1.8,不过我把部分方法改了,1.7也可以,看看吧: 首先是utils,里面用到...
  • 不过很多时候,我们需要将完成训练之后较为有效的模型进行封装和部署,但是像许多公司最后的部署都是用Java语言实现的,所以,此时我们就需要掌握如何通过Java来调用tensorflow模型。 保存模型...
  • 下面我们就来介绍一下分别python代码与java代码调用训练好的模型。 1.模型训练 首先我们训练一个简单的模型 y=3x+0.1y = 3x + 0.1y=3x+0.1 #!/usr/bin/env python # encoding: utf-8 """ @author: wanglei @time:...
  • 模型是前面训练一个简单的模型,用java调有个前提要是1.8的版本,有个jar包是1.8编译的,低版本会报错,先看下maven依赖,参考https://blog.csdn.net/shin627077/article/details/78592729&lt;dependency&gt;...
  • 我们的模型训练部分往往是Python写Keras或者直接上TensorFlow,然后得到model。但部署这件事还没听说直接Python就能解决,大多需要别的工具。第一种方式是通过网络,以服务器、客户端的形式实现。这时候可以写个...
  • 我只想在Tensorflow(或Keras,我们将看到)中构建k-NN模型,并在我的Java项目中使用它,但事实并非如此.我的数据将如下所示:data: [{id: 1, distance: [111, 222, 333] },{id: 1, distance: [222, 111, 333] },{id: 1, ...
  • 1.TensorFlow的训练模型在Android和Java的应用及调用 2.tensorflow的python离线训练java在线预测方案  3.tensorflow训练的模型java中的使用 4.http://blog.csdn.net/dd864140130/article/details/71774229  ...
  • 我设法DNNRegressor编写了一个TensorFlow python程序。我已经训练了模型,并且能够通过手动创建的输入(常量张量)从Python中的模型中获得预测。我还能够以二进制格式导出模型。在import pandas as pdimport numpy ...
  • 使用SavedModel API保存和加载一个TensorFlow模型前言什么是Saved?与tf.train.Saver的差别保存模型添加名称保存加载模型Python加载用Java加载 前言 ...SavedModel API 可以将训练好的模型保存为一种容易被加载到...
  • Qt+opencv dnn模块调用tensorflow模型

    千次阅读 热门讨论 2019-02-24 21:28:48
    opencv默认是msvc的,如果Qt装的mingw的,需要编译一份opencv,我在网盘存了一份3.4.1版本的,忘记...之前做一个app部署深度学习模型,网上看到的都是java+android studio做的,Qt做的见不到,最近才知道opencv有d...
  • 当你比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。代码 opt4_7.py#coding:...
  • PMML实现机器学习模型的跨平台上线中,我们讨论了使用PMML文件来实现跨平台模型上线的方法,这个方法当然也适用于tensorflow生成的模型,但是由于tensorflow模型往往较大,使用无法优化的PMML文件大多数时候很...
  • 之前做一个app部署深度学习模型,网上看到的都是java+android studio做的,Qt做的见不到,最近才知道opencv有dnn模块,在网上找了一些资料,据说可以使用各种主流框架的模型文件,因此试用了一下,感觉用来部署很...
  • 记得上几篇博客有提到用tensorflow 中保存模型,然后用tensorflow serving中启动服务再用java调用,实际这样绕了很多,今天发现在java中也能直接加载调用TensorFlow serving中调用的格式,实际在java中也可以直接...
  • tensorflow训练好的模型java调用

    万次阅读 热门讨论 2017-10-20 23:28:44
    最近基于bi-lstm做了一个辱骂识别模型准备部署到线上,之前打算python 启动一个...通过python中训练好模型用java来调用,刚刚好摸索了下,动手写了下代码,总算能在java中调用,废话不多说,直接看代码实现情况。
  • 1. tensorflow模型的跨平台上线的备选方案  tensorflow模型的跨平台上线的备选方案...这里唯一的区别是转化生成PMML文件需要一个Java库jpmml-tensorflow来完成,生成PMML文件后,跨语言加载模型和其他PMML模...
  • 1、采用Java语言重现模型接口 2、采用jar包 3、使用socket通信接口 对于1方法,由于算法这块不是我负责,要改写起来很麻烦。2方法没试过,本次采用第三种方法,这个也是借鉴该位博主的思路...
  • tensorflow目前主要的使用语言主要还是python,但是有相当一部分互联网应用是用java开发的,那么java应用如何使用tensorflow开发深度学习相关的功能呢?虽然google开源了tensorflow serving用于生产环境部署训练好的...

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

java用tensorflow模型

java 订阅