Tensorflow java load model

Русские Блоги

Давайте сначала решим первую проблему, как сохранить его в формате pb, на самом деле это очень просто и требует всего 3 строчки кода.

builder = tf.saved_model.builder.SavedModelBuilder('./model2') # SavedModelBuilder помещает путь, который вы хотите сохранить, например, мой путь - это файл модели2 в корневом каталоге 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", поэтому я могу получить x_hodler на основе "input_x" в java # Точно так же мой вывод - это softmax (), поэтому я назвал его «предсказать». # Другие переменные, которые нам не нужно учитывать, потому что цель нашей модели обучения - вводить и выводить данные. 

Хорошо, теперь первая проблема решена. Теперь решим проблему вызова в java.

Читайте также:  background-repeat

    Сначала представьте пакет tensorflow в maven pom.xml. Моя сумка выглядит так

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> 

Не копируйте мой код напрямую, потому что версия tenorflow, которую вы используете во время обучения, может быть не 1.12.0.
Итак, вам нужно перейти на python, чтобы узнать, какая у вас версия TensorFlow. Методы, указанные ниже:

import tensorflow as tf tf.__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"); // Операция, которую нужно выполнить, находим вывод по имени 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);// Копируем данные в тензоре в массив 

Забудьте об этом, я выложу весь свой код, чтобы он выглядел более интуитивно понятным.

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)  MapString, Integer> map = new HashMapString, Integer>(); MapInteger,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;i1;i++) for(int j=0;j600;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;k1;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;i600;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"); // Операция для выполнения 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;i10;i++) if(a[i]>M) M=a[i]; index2=i; > > return index2; > > 

Источник

How to Load a TensorFlow Model in Java

As a data scientist or software engineer, you may need to use TensorFlow models in your Java projects. TensorFlow is an open-source machine learning framework developed by Google, and it has become one of the most popular platforms for building and training deep learning models. In this article, we will discuss how to load a TensorFlow model in Java.

How to Load a TensorFlow Model in Java

As a data scientist or software engineer, you may need to use TensorFlow models in your Java projects. TensorFlow is an open-source machine learning framework developed by Google, and it has become one of the most popular platforms for building and training deep learning models. In this article, we will discuss how to load a TensorFlow model in Java.

What is a TensorFlow Model?

A TensorFlow model is a collection of nodes that perform computations on tensors. In other words, it’s a set of instructions that tell a computer how to recognize patterns in data. TensorFlow models can be used for various tasks, such as image classification, natural language processing, and speech recognition.

A TensorFlow model is typically saved in a format called a SavedModel. A SavedModel is a binary file that contains the TensorFlow graph, which is a set of connected nodes that define the computation. It also includes the variables, which are the values that the nodes use during computation.

Loading a TensorFlow Model in Java

To load a TensorFlow model in Java, you will need to use the TensorFlow Java API. The TensorFlow Java API is a set of Java bindings for the TensorFlow C API. It allows Java developers to use TensorFlow models in their Java applications.

Step 1: Add TensorFlow Java Dependencies to Your Project

To use the TensorFlow Java API, you need to add the TensorFlow Java dependencies to your project. You can do this by adding the following dependency to your pom.xml file if you are using Maven:

 org.tensorflow tensorflow 2.6.0  

If you are using Gradle, you can add the following dependency to your build.gradle file:

Step 2: Load the TensorFlow Model

To load a TensorFlow model in Java, you need to create an instance of the SavedModelBundle class. The SavedModelBundle class is a wrapper around the TensorFlow SavedModel format.

Here’s an example of how to load a TensorFlow model in Java:

import org.tensorflow.SavedModelBundle; public class LoadModel < public static void main(String[] args) < SavedModelBundle model = SavedModelBundle.load("/path/to/saved/model", "serve"); System.out.println(model); >> 

In this example, we use the SavedModelBundle.load() method to load the TensorFlow model. The first argument is the path to the saved model directory, and the second argument is the tag that identifies the model.

Step 3: Use the TensorFlow Model

Once you have loaded the TensorFlow model, you can use it to make predictions on new data. To use the TensorFlow model, you need to create a Session object and run the model on the input data.

Here’s an example of how to use the TensorFlow model to make predictions:

import org.tensorflow.SavedModelBundle; import org.tensorflow.Session; import org.tensorflow.Tensor; public class UseModel < public static void main(String[] args) < SavedModelBundle model = SavedModelBundle.load("/path/to/saved/model", "serve"); Session session = model.session(); Tensor inputTensor = Tensor.create(new float[][]>); Tensor outputTensor = session.runner().feed("input", inputTensor).fetch("output").run().get(0); System.out.println(outputTensor.floatValue()); > > 

In this example, we create a Session object using the model.session() method. We then create an input Tensor using the Tensor.create() method. We run the model on the input Tensor using the session.runner() method, and we fetch the output Tensor using the fetch() method. Finally, we print the output Tensor value using the outputTensor.floatValue() method.

Conclusion

In this article, we discussed how to load a TensorFlow model in Java. We walked through the steps of adding the TensorFlow Java dependencies to your project, loading the TensorFlow model using the SavedModelBundle class, and using the TensorFlow model to make predictions on new data. With these steps, you can easily use TensorFlow models in your Java projects.

If you want to learn more about TensorFlow, check out the TensorFlow website and the TensorFlow Java API documentation. Happy coding!

Источник

Оцените статью