python - 在 TensorFlow 2.0 中使用加载的 Estimator 进行预测
问题描述
我正在尝试按照本指南加载SavedModel
. 我首先保存训练好的模型如下
feature_columns
>>> [NumericColumn(key='Fwd_IAT_Total', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Flow_Duration', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_Packet_Length_Std', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Init_Win_bytes_forward', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Destination_Port', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Protocol', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_Packet_Length_Min', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Min_Packet_Length', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_Packets/s', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_IAT_Max', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Average_Packet_Size', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_Header_Length', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_Packet_Length_Max', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_Header_Length.1', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Flow_IAT_Min', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='min_seg_size_forward', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Fwd_IAT_Mean', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Max_Packet_Length', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='ACK_Flag_Count', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None),
NumericColumn(key='Packet_Length_Std', shape=(1,), default_value=None, dtype=tf.float32, normalizer_fn=None)]
serving_input_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(
tf.feature_column.make_parse_example_spec(feature_columns))
# Save the model
estimator_path = classifier.export_saved_model("/model1", serving_input_fn)
然后加载模型
PATH_TO_MODEL_1 = "/model1"
# Load the DNN model
ddos_classifier_1 = tf.saved_model.load(PATH_TO_MODEL_1)
ddsos_classifier_1
>>> <tensorflow.python.training.tracking.tracking.AutoTrackable at 0x7f3f80be5d68>
我不清楚如何将这个非常基本的示例转换为我的用例。
imported = tf.saved_model.load(estimator_path)
def predict(x):
example = tf.train.Example()
example.features.feature["x"].float_list.value.extend([x])
return imported.signatures["predict"](
examples=tf.constant([example.SerializeToString()]))
解决方案
这对我有用
imported = ddos_classifier_1.saved_model.load(estimator_path)
def predict(df):
"""
returns the predicted label given a dataframe of features
"""
feature = {k: tf.train.Feature(float_list=tf.train.FloatList(value=[v])) for k, v in dict(df).items()}
example = tf.train.Example(features=tf.train.Features(feature=feature))
prediction = ddos_classifier_1.signatures["predict"](examples=tf.constant([example.SerializeToString()]))
return prediction["classes"].numpy()[0][0].decode("utf-8")
推荐阅读
- html - 在加载器 CSS 中居中对齐旋转 SVG
- jquery - HighCharts Stacked Charts xAxis with json不工作
- android - 在android中关闭对话框时是否需要删除TextWatcher?
- reactjs - ReactJS,在创建反应应用程序时如何保持视口初始比例=1.0
- python - 在python中有效地从现有变量创建一个新变量
- javascript - 如何更新对象的某些属性?
- flutter - 为什么 vscode 说资产不存在?扑
- javascript - JavaScript 在解析 XML 字符串时在句子之间添加空格
- twilio - 如何使用发送和等待回复小部件立即收到发送的消息 - Twilio Studio
- html - 单击后如何使图标保持更改状态。使用 CSS