使用estimator重写tensorflow入门程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/crazyman2010/article/details/78921086

忍不住进入机器学习这个坑,决定从tensorflow教程入门。
看了tensorflow官方文档的入门篇:https://www.tensorflow.org/get_started/get_started,后文介绍了高级api estimator的使用,尝试了一下,结果不会用,查了些资料,用estimator把入门篇那个程序重写了一下,记录代码如下:

import numpy as np
import tensorflow as tf

# 定义特征值为x
feature_columns = [tf.feature_column.numeric_column("x")]
# 选择模型为线性回归
estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns)

# 准备训练数据
x_train = np.array([1., 2., 3., 4.])
y_train = np.array([0., -1., -2., -3.])
train_input_fn = tf.estimator.inputs.numpy_input_fn({"x": x_train}, y_train, batch_size=1, num_epochs=None,
                                                    shuffle=False)
# 训练模型
estimator.train(input_fn=train_input_fn, steps=3000)

# 显示训练结果
print("---train result ---")
for var in estimator.get_variable_names():
    print(var + "    =>%r" % estimator.get_variable_value(var))
print()

# 预测x=[4]的时候的y值
samples = np.array([4])
predict_input_fn = tf.estimator.inputs.numpy_input_fn({"x": samples}, batch_size=1, num_epochs=1, shuffle=False)
predict_result = list(estimator.predict(predict_input_fn))
print("predict_result    =>%r" % predict_result)

# 评估 x=[4], y=[-3.1] 与模型之间的差距
x_eval = np.array([4])
y_eval = np.array([-3.1])
eval_input_fn = tf.estimator.inputs.numpy_input_fn({"x": x_eval}, y_eval, batch_size=1, num_epochs=1, shuffle=False)
eval_result = estimator.evaluate(eval_input_fn)
print("eval_result    =>%r" % eval_result)

运行结果如下:

---train result ---
['global_step', 'linear/linear_model/bias_weights', 'linear/linear_model/bias_weights/part_0/Ftrl', 'linear/linear_model/bias_weights/part_0/Ftrl_1', 'linear/linear_model/x/weights', 'linear/linear_model/x/weights/part_0/Ftrl', 'linear/linear_model/x/weights/part_0/Ftrl_1']
global_step    =>3000
linear/linear_model/bias_weights    =>array([ 0.99999285], dtype=float32)
linear/linear_model/bias_weights/part_0/Ftrl    =>array([ 131.23556519], dtype=float32)
linear/linear_model/bias_weights/part_0/Ftrl_1    =>array([-57.27864075], dtype=float32)
linear/linear_model/x/weights    =>array([[-0.99999756]], dtype=float32)
linear/linear_model/x/weights/part_0/Ftrl    =>array([[ 685.30853271]], dtype=float32)
linear/linear_model/x/weights/part_0/Ftrl_1    =>array([[ 130.8916626]], dtype=float32)

predict_result    =>[{'predictions': array([-2.99999738], dtype=float32)}]
eval_result    =>{'average_loss': 0.010000505, 'loss': 0.010000505, 'global_step': 3000}

根据变量名称,可以知道W=’linear/linear_model/weights’ = -0.99999756,b=linear/linear_model/bias_weights=0.99999285, 和入门篇结果基本一致。

estimator除了训练还提供了预测函数和评估函数:
estimator.predict:给定x,计算出y值
estimator.evaluate:给定x和y,计算出差值大小

猜你喜欢

转载自blog.csdn.net/crazyman2010/article/details/78921086