TensorFlow serving 에서 불 러 온 모델 형식 을 자바 에서 직접 불 러 옵 니 다.
4606 단어 python 프로 그래 밍기계 학습
코드 직접 보기:
Python 모델 코드 생 성,TensorFlow serving 에서 호출 가능:
import tensorflow as tf
import numpy as np
import os
tf.app.flags.DEFINE_integer('training_iteration', 302,
'number of training iterations.')
tf.app.flags.DEFINE_integer('model_version', 1, 'version number of the model.')
tf.app.flags.DEFINE_string('work_dir', 'model/', 'Working directory.')
FLAGS = tf.app.flags.FLAGS
sess = tf.InteractiveSession()
x = tf.placeholder('float', shape=[None, 3],name="x")
y_ = tf.placeholder('float', shape=[None, 1])
w = tf.get_variable('w', shape=[3, 1], initializer=tf.truncated_normal_initializer)
b = tf.get_variable('b', shape=[1], initializer=tf.zeros_initializer)
sess.run(tf.global_variables_initializer())
y = tf.add(tf.matmul(x, w) , b,name="y")
ms_loss = tf.reduce_mean((y - y_) ** 2)
train_step = tf.train.GradientDescentOptimizer(0.005).minimize(ms_loss)
train_x = np.random.randn(1000, 3)
# let the model learn the equation of y = x1 * 1 + x2 * 2 + x3 * 3
train_y = np.sum(train_x * np.array([1, 2, 3]) + np.random.randn(1000, 3) / 100, axis=1).reshape(-1, 1)
train_loss = []
for i in range(FLAGS.training_iteration):
loss, _ = sess.run([ms_loss, train_step], feed_dict={x: train_x, y_: train_y})
train_loss.append(loss)
export_path_base = FLAGS.work_dir
export_path = os.path.join(
tf.compat.as_bytes(export_path_base),
tf.compat.as_bytes(str(FLAGS.model_version)))
print('Exporting trained model to', export_path)
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
tensor_info_x = tf.saved_model.utils.build_tensor_info(x)
tensor_info_y = tf.saved_model.utils.build_tensor_info(y)
prediction_signature = (
tf.saved_model.signature_def_utils.build_signature_def(
inputs={'input': tensor_info_x},
outputs={'output': tensor_info_y},
method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME))
legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
builder.add_meta_graph_and_variables(
sess, [tf.saved_model.tag_constants.SERVING],
signature_def_map={
'prediction':
prediction_signature,
},
legacy_init_op=legacy_init_op)
builder.save()
print('Training error %g' % loss)
print('Done exporting!')
print('Done training!')
여기 서 생 성 된 버 전 번호 1 의 모델 은 자바 프로젝트 의 resource 디 렉 터 리 에 직접 복사 하여 자바 의 설정 의존 도 를 보십시오.
pom.xml:
org.tensorflow
tensorflow
1.7.0
TensorflowUtils:
import org.tensorflow.SavedModelBundle;
public class TensorflowUtils {
public static SavedModelBundle loadmodel(String modelpath){
SavedModelBundle bundle=SavedModelBundle.load(modelpath,"serve");
return bundle;
}
}
Main.java
import com.xxxxxx.util.TensorflowUtils;
import org.tensorflow.SavedModelBundle;
import org.tensorflow.Tensor;
import java.util.Arrays;
public class Model {
SavedModelBundle bundle = null;
public void init(){
String classpath=this.getClass().getResource("/").getPath()+"1" ;
bundle=TensorflowUtils.loadmodel(classpath);
}
public double getResult(float[][] arr){
Tensor tensor=Tensor.create(arr);
Tensor> result= bundle.session().runner().feed("x",tensor).fetch("y").run().get(0);
float[][] resultValues = (float[][])result.copyTo(new float[1][1]);
result.close();
return resultValues[0][0];
}
public static void main(String[] args){
Model model =new Model();
model.init();
float[][] arr=new float[1][3];
arr[0][0]=1f;
arr[0][1]=0.5f;
arr[0][2]=2.0f;
System.out.println(model.getResult(arr));
System.out.println(Arrays.toString(" ".getBytes()));
}
}
기본적으로 훈련 과정 에서 모델 을 만 들 면 TensorFlow 에서 바로... serving 에서 발표 하여 사용 할 수도 있 고 자바 에서 직접 호출 할 수도 있 으 며 비교적 실 용적 인 방법 입 니 다.
7.721486568450928
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
에러나 실행 완료를 LINE으로 통지 【Python】기계 학습 등을 하고 있으면 1개의 프로그램의 실행에 며칠 걸리는 것은 드물지 않습니다. 프로그램의 실행 상황이 걱정되어 몇 시간 간격으로 단말기를 열었다. 그런 날을 보내지 않았습니까? 그런 사람들을 위해 이번에는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.