tf.estimator快速入门[5]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tf.estimator快速入门[5]相关的知识,希望对你有一定的参考价值。
tf.estimator快速入门
TensorFlow的高级机器学习API(tf.estimator)可以很容易地配置,培训和评估各种机器学习模型。在本教程中,您将使用tf.estimator构建一个 神经网络 分类器和训练它在 虹膜数据集的基础上萼片/花瓣形状来预测的花卉品种。您可以编写代码来执行以下五个步骤:
- 含鸢尾训练/测试数据划分为TensorFlow负载的CSV
Dataset
- 构造一个神经网络分类
- 利用训练数据训练模型
- 评估模型的准确性
- 分类新样本
完整的神经网络源代码
下面是神经网络分类器的完整代码:
from __future__ import absolute_import from __future__ import division from __future__ import print_function import os import urllib import numpy as np import tensorflow as tf # Data sets IRIS_TRAINING = "iris_training.csv" IRIS_TRAINING_URL = "http://download.tensorflow.org/data/iris_training.csv" IRIS_TEST = "iris_test.csv" IRIS_TEST_URL = "http://download.tensorflow.org/data/iris_test.csv" def main(): # If the training and test sets aren‘t stored locally, download them. if not os.path.exists(IRIS_TRAINING): raw = urllib.urlopen(IRIS_TRAINING_URL).read() with open(IRIS_TRAINING, "w") as f: f.write(raw) if not os.path.exists(IRIS_TEST): raw = urllib.urlopen(IRIS_TEST_URL).read() with open(IRIS_TEST, "w") as f: f.write(raw) # Load datasets. training_set = tf.contrib.learn.datasets.base.load_csv_with_header( filename=IRIS_TRAINING, target_dtype=np.int, features_dtype=np.float32) test_set = tf.contrib.learn.datasets.base.load_csv_with_header( filename=IRIS_TEST, target_dtype=np.int, features_dtype=np.float32) # Specify that all features have real-value data feature_columns = [tf.feature_column.numeric_column("x", shape=[4])] # Build 3 layer DNN with 10, 20, 10 units respectively. classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns, hidden_units=[10, 20, 10], n_classes=3, model_dir="/tmp/iris_model") # Define the training inputs train_input_fn = tf.estimator.inputs.numpy_input_fn( x={"x": np.array(training_set.data)}, y=np.array(training_set.target), num_epochs=None, shuffle=True) # Train model. classifier.train(input_fn=train_input_fn, steps=2000) # Define the test inputs test_input_fn = tf.estimator.inputs.numpy_input_fn( x={"x": np.array(test_set.data)}, y=np.array(test_set.target), num_epochs=1, shuffle=False) # Evaluate accuracy. accuracy_score = classifier.evaluate(input_fn=test_input_fn)["accuracy"] print("\nTest Accuracy: {0:f}\n".format(accuracy_score)) # Classify two new flower samples. new_samples = np.array( [[6.4, 3.2, 4.5, 1.5], [5.8, 3.1, 5.0, 1.7]], dtype=np.float32) predict_input_fn = tf.estimator.inputs.numpy_input_fn( x={"x": new_samples}, num_epochs=1, shuffle=False) predictions = list(classifier.predict(input_fn=predict_input_fn)) predicted_classes = [p["classes"] for p in predictions] print( "New Samples, Class Predictions: {}\n" .format(predicted_classes)) if __name__ == "__main__": main()
以下各节走过了详细的代码。
加载虹膜CSV数据TensorFlow
该虹膜数据集包含150行数据,包括来自每个的三个相关鸢尾种类50个样品: 山鸢尾,虹膜锦葵,和变色鸢尾。
每行包含每个花的样品如下的数据: 萼片长度,萼片宽度, 花瓣长度,花瓣宽度,和花的品种。花种被表示为整数,0表示山鸢尾,表示1 变色鸢尾,和2表示虹膜锦葵
对于本教程,虹膜数据已被随机化,并且分成两个单独的CSV:
- 的训练集的120个样本(iris_training.csv)
- 测试组的30个样品(iris_test.csv)。
要开始,首先导入必要的模块,并定义下载和存储数据集:
from __future__ import absolute_import from __future__ import division from __future__ import print_function import os import urllib import tensorflow as tf import numpy as np IRIS_TRAINING = "iris_training.csv" IRIS_TRAINING_URL = "http://download.tensorflow.org/data/iris_training.csv" IRIS_TEST = "iris_test.csv" IRIS_TEST_URL = "http://download.tensorflow.org/data/iris_test.csv"
然后,如果训练和测试集还不是本地存储,下载。
tf.estimator提供了多种预定义的模型,叫做Estimator
S,您可以使用“开箱即用”,以您的数据运行的培训和评估操作。在这里,你将配置一个深层神经网络分类模型,以适应虹膜数据。使用tf.estimator,你可以实例化tf.estimator.DNNClassifier
与代码只是几行:
# Specify that all features have real-value data feature_columns = [tf.feature_column.numeric_column("x", shape=[4])] # Build 3 layer DNN with 10, 20, 10 units respectively. classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns, hidden_units=[10, 20, 10], n_classes=3, model_dir="/tmp/iris_model")
上述第一代码定义该模型的特征列,用来指定在所述数据集的特征的数据类型。所有特征数据是连续的,所以tf.feature_column.numeric_column
是用构造特征列相应的功能。有在数据组四个特征(萼片宽度,萼片高度,花瓣宽度,和高度花瓣),所以相应地shape
必须设置为[4]
以保持所有数据。
然后,代码创建一个DNNClassifier
使用以下参数型号:
feature_columns=feature_columns
。上文所定义的组特征列。hidden_units=[10, 20, 10]
。三个 隐藏层,含有10,20和10的神经元,分别。n_classes=3
。三个目标类,代表三个光圈品种。model_dir=/tmp/iris_model
。该目录中TensorFlow将模型训练过程中保存检查点数据和TensorBoard摘要。
描述训练输入管道
所述tf.estimator
API使用输入功能,其创建用于生成模型数据中TensorFlow操作。我们可以用tf.estimator.inputs.numpy_input_fn
产生的输入管道:
# Define the training inputs train_input_fn = tf.estimator.inputs.numpy_input_fn( x={"x": np.array(training_set.data)}, y=np.array(training_set.target), num_epochs=None, shuffle=True)
适合DNNClassifier虹膜训练数据
现在你已经配置了DNN classifier
模型,您可以在适合使用光圈训练数据train
的方法。通过train_input_fn
作为input_fn
,和步数来训练(在这里,2000年):
# Train model. classifier.train(input_fn=train_input_fn, steps=2000)
该模型的状态被保存在classifier
,这意味着你可以反复训练,如果你喜欢。例如,上面是等效于以下语句:
以上是关于tf.estimator快速入门[5]的主要内容,如果未能解决你的问题,请参考以下文章
修改 tf.estimator.Estimator 如何为 Tensorboard 创建摘要