tensorflow get stared
目录
- 机器学习是什么
- get_stared
- 常见的7个步骤
机器学习是什么
此处我们可以将机器学习的定义简化为 8 个字:
『使用数据解决问题』
这一表述也许太简单了,但却足以充分表达我们的目标。尤其是当我们将这句话拆分成两个部分:「使用数据」和「解决问题」,我们会发现两者充分勾勒出机器学习的两个重要层面(训练和预测)。
数据解决问题.pic.jpg「使用数据」也就是常说的「训练」,而「解决问题」则被当作是「预测」或是推理的过程。
将这两者联系起来的部分叫做模型。我们使用数据集来训练模型以实现更好、更有用的预测。训练完成后,这一模型就可以通过部署来预测未曾出现过的数据。
机器学习核心.pic.jpg通过数据训练处模型,使用模型来预测或解决问题。
get_stared
-
安装tensorflow
略...
-
获取示例代码
git clone cd models/samples/core/get_started/
-
运行程序
python premade_estimator.py
编程堆栈
image.pngEstimator:代表一个完整的模型。Estimator API 提供一些方法来训练模型、判断模型的准确率并生成预测。
DataSet:构建数据输入管道。Dataset API 提供一些方法来加载和操作数据,并将数据馈送到您的模型中。
对鸢尾花进行分类
-
导入和解析数据集。
鸢尾花程序需要下列两个 .csv 文件中的数据:
# Call load_data() to parse the CSV file. (train_feature, train_label), (test_feature, test_label) = load_data()
-
创建特征列以描述数据。
# Create feature columns for all features. my_feature_columns = [] for key in train_x.keys(): my_feature_columns.append(tf.feature_column.numeric_column(key=key))
-
选择模型类型。
神经网络可以发现特征与标签之间的复杂关系。
创建了一个两个隐藏层(每层数量为10)的DNN
# Build 2 hidden layer DNN with 10, 10 units respectively. classifier = tf.estimator.DNNClassifier( feature_columns=my_feature_columns, # Two hidden layers of 10 nodes each. hidden_units=[10, 10], # The model must choose between 3 classes. n_classes=3)
-
训练模型。
classifier.train( input_fn=lambda:train_input_fn(train_feature, train_label, args.batch_size), steps=args.train_steps)
-
评估模型的效果。
# Evaluate the model. eval_result = classifier.evaluate( input_fn=lambda:iris_data.eval_input_fn(test_x, test_y, args.batch_size))
-
让经过训练的模型进行预测。
每个 Estimator 均提供一个 predict 方法,premade_estimator.py 通过如下方式调用该方法:
predictions = classifier.predict( input_fn=lambda:eval_input_fn(predict_x, batch_size=args.batch_size))
python premade_estimator.py
"""An Example of a DNNClassifier for the Iris dataset."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import argparse
import tensorflow as tf
import iris_data
parser = argparse.ArgumentParser()
parser.add_argument('--batch_size', default=100, type=int, help='batch size')
parser.add_argument('--train_steps', default=1000, type=int,
help='number of training steps')
def main(argv):
args = parser.parse_args(argv[1:])
# Fetch the data
(train_x, train_y), (test_x, test_y) = iris_data.load_data()
# Feature columns describe how to use the input.
my_feature_columns = []
for key in train_x.keys():
my_feature_columns.append(tf.feature_column.numeric_column(key=key))
# Build 2 hidden layer DNN with 10, 10 units respectively.
classifier = tf.estimator.DNNClassifier(
feature_columns=my_feature_columns,
# Two hidden layers of 10 nodes each.
hidden_units=[10, 10],
# The model must choose between 3 classes.
n_classes=3)
# Train the Model.
classifier.train(
input_fn=lambda:iris_data.train_input_fn(train_x, train_y,
args.batch_size),
steps=args.train_steps)
# Evaluate the model.
eval_result = classifier.evaluate(
input_fn=lambda:iris_data.eval_input_fn(test_x, test_y,
args.batch_size))
print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))
# Generate predictions from the model
expected = ['Setosa', 'Versicolor', 'Virginica']
predict_x = {
'SepalLength': [5.1, 5.9, 6.9],
'SepalWidth': [3.3, 3.0, 3.1],
'PetalLength': [1.7, 4.2, 5.4],
'PetalWidth': [0.5, 1.5, 2.1],
}
predictions = classifier.predict(
input_fn=lambda:iris_data.eval_input_fn(predict_x,
labels=None,
batch_size=args.batch_size))
template = ('\nPrediction is "{}" ({:.1f}%), expected "{}"')
for pred_dict, expec in zip(predictions, expected):
class_id = pred_dict['class_ids'][0]
probability = pred_dict['probabilities'][class_id]
print(template.format(iris_data.SPECIES[class_id],
100 * probability, expec))
if __name__ == '__main__':
tf.logging.set_verbosity(tf.logging.INFO)
tf.app.run(main)
常见的7个步骤
-
搜集数据
搜集的数据和质量将决定最终形成的预测模型的好坏。
-
数据准备
对数据进行去重,规范化和纠错等等
将数据分为两部分:训练集和测试集
-
选择模型
已存在的模型:处理图像,文本,音频等
自定义模型:其他模型不适用时 -
训练模型
使用训练数据来训练模型
-
评估模型
使用测试数据来评估
-
参数微调
重复次数,学习频率,初始条件
-
预测
解决问题