TensorFlow:DNNRegressor,如何保存模型以从

时间:2017-07-28 19:14:35

标签: python machine-learning tensorflow

我是TensorFlow的新手,我正在尝试将我的scikit-learn模型转换为TensorFlow符号,但我发现它过于复杂。

在scikit中,您只需致电model.dump("ModelName.pkl")保存模型,然后致电joblib.load("ModelName.pkl")再次使用它。我试图用TensorFlow做类似的事情,但我收到以下错误:

Traceback (most recent call last):
  File "/Users/user0/Desktop/IPML_Model/tensorflow_model_train.py", line 39, in <module>
    saver = tf.train.Saver()
  File "/Library/Python/2.7/site-packages/tensorflow/python/training/saver.py", line 1139, in __init__
    self.build()
  File "/Library/Python/2.7/site-packages/tensorflow/python/training/saver.py", line 1161, in build
    raise ValueError("No variables to save")
ValueError: No variables to save

我想要做的就是使用get_training_data()训练模型,保存它,然后加载它以便我可以调用predict。这就是我所拥有的:

def get_training_data():
    X, y = preprocess_data()

    X_train, _, y_train, _ = train_test_split(X, y, test_size=0.2, random_state=123)

    feature_set = {f: tf.constant(X_train[f]) for f in features}
    label_set = tf.constant(y_train)

    return feature_set, label_set

# Start a session
sess = tf.Session()

# Initialize a DNNRegressor model
feature_cols = [real_valued_column(k) for k in features]
dnn_regressor = DNNRegressor(feature_columns=feature_cols, hidden_units=[50, 50], label_dimension=7, model_dir=os.getcwd())

# Train the model
dnn_regressor.fit(input_fn=lambda: get_training_data(), steps=5000)

# Save the model
saver = tf.train.Saver()
saver.save(sess, "dnnregressor.ckpt")

我可以在拟合后调用predict dnnregressor并且不需要&#34;变量&#34;,但我想首先保存模型然后调用预测。什么是最简单,最简单的方法呢?

1 个答案:

答案 0 :(得分:1)

当您致电时,模型会保存在model_dir中:

dnn_regressor = DNNRegressor(feature_columns=feature_cols, hidden_units=[50, 50], label_dimension=7, model_dir=os.getcwd())

现在,在inference期间再次调用上述内容时,它会从model_dir加载模型,然后调用dnn_regressor.predict()函数。