机器学习模型工程化

背景

机器学习把 Python 的历史地位推向了一个小高峰,我们习惯于用 Python 去编写机器学习的代码,但是在实际工程中,业务方用 Java 的可能性会比较大,那么如何用 Java 调用 Python 写的已经训练好的机器学习模型呢。本文接下来后以代码的形式极简演示,基于 Tensorflow 训练好的分类模型,如何使用 Java 应用调用。

环境

很奇怪,对于这样的问题,网络上很少有正确的例子,或者说很少有基于 Tensorflow 高级分类器 DNNClassifier 导出的模型,用 Java 调用的例子,为了减少麻烦,如果要实验的情况下,请以下面环境为准。

  • Python: 3.6
  • Tensorflow: 1.10.0
  • Java 工程中的 gradle 依赖:
    compile 'org.tensorflow:tensorflow:1.10.0'
    compile 'org.tensorflow:proto:1.10.0'

代码演示

Python 代码如下,以著名的 iris 代码为例,用 DNNClassifier 进行分类

#
# Created on: 2018/8/23.
# Author:     Heng Xiangzhong
# 
# May the code be with you!
#

import pandas as pd
import tensorflow as tf


CSV_COLUMN_NAMES = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']
data_train = pd.read_csv('./data/iris_training.csv', names=CSV_COLUMN_NAMES, header=0)
data_test = pd.read_csv('./data/iris_test.csv', names=CSV_COLUMN_NAMES, header=0)
#print(data_train.head())

x_train = data_train
y_train = data_train.pop('Species')
x_test = data_test
y_test = data_test.pop('Species')

feature_columns = []
for key in x_train.keys():
    feature_columns.append(tf.feature_column.numeric_column(key=key))
classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns, hidden_units=[10, 10], n_classes=3)
# 用来保存为 saved_model
feature_spec = tf.feature_column.make_parse_example_spec(feature_columns)
serving_input_receiver_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)


def train_func(x, y):
    dataset = tf.data.Dataset.from_tensor_slices((dict(x), y))
    dataset = dataset.shuffle(1000).repeat().batch(100)
    return dataset


classifier.train(input_fn=lambda: train_func(x_train, y_train), steps=1000)
export_dir = classifier.export_sa
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值