DNNClassifier的基本格式

初始化:

  • feature_columns作为特征列,但是这里不添加数据,仅仅是使用tf.feature_column添加数据特征;数据特征相当于一个字典的键值,这个键值是真正训练时输入数据的特征列的名称。
  • hidden_units=[10, 10]表示隐含层是10*10的神经网络
  • n_classes=3表示输出层的分类有3个
  • optimizer表示使用的训练函数
tf.estimator.DNNClassifier(feature_columns=my_feature_columns,hidden_units=[10, 10],n_classes=3,optimizer=tf.train.AdamOptimizer(learning_rate=0.01))

训练

训练的时候,需要输入训练数据,并指定训练的步数。这一步需要和tf.data.Dataset结合使用。一般来说,使用tf.data.Dataset进行每一个批次的数据喂取,并使用steps参数指定训练的步数。使用lambda函数来简化表达式。返回的数据必须和上一步初始化的数据列具有相同的格式。

classifier.train(input_fn=lambda: iris_data.train_input_fn(train_x, train_y,args.batch_size),steps=args.train_steps
)

预测

输入需要分类的数据集的特征列,特征列和初始化的要一致。这里使用了自定义的函数,具体请参照下面的源代码。

classifier.predict(input_fn=lambda: iris_data.eval_input_fn(predict_x,labels=None,batch_size=args.batch_size)
)

预测的返回值是一个字典的集合,具体结果如下:

{
'probabilities': array([9.9973017e-01, 2.6193992e-04, 7.9224610e-06], dtype=float32),
'logits': array([ 5.043977 , -3.2031484, -6.7015615], dtype=float32),'classes': array([b'0'],dtype=object), 'class_ids': array([0])
}
  • probabilities: 表示属于每个种类的可能性
  • logits:暂时没弄明白,好像一般不用
  • classes:表示属于哪一类
  • class_ids:表示类的下标
    因为实例要进行3个分类,所以是上述的结果。

配合Dataset的数据读取

这篇博客中总结了一下Dataset的基本用法。tensorflow中,一般是先定义好神经网络输入的特征列,然后使用Dataset读取特征列。注意,读取的时候,要把每一个特征列添加上列的名称,然后进行字典化处理。之后,初始化DNNClassifier的特征列,使得两者的特征列的名称相同。之后处理好一次数据的batch_size等。最后进行读取。
类似这种格式:

def train_input_fn(features, labels, batch_size):dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))dataset = dataset.shuffle(1000).repeat().batch(batch_size)return dataset

完整版代码

读取数据的代码:

import pandas as pd
import tensorflow as tfTRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
TEST_URL = "http://download.tensorflow.org/data/iris_test.csv"CSV_COLUMN_NAMES = ['SepalLength', 'SepalWidth','PetalLength', 'PetalWidth', 'Species']
SPECIES = ['Setosa', 'Versicolor', 'Virginica']def maybe_download():train_path = tf.keras.utils.get_file(fname=TRAIN_URL.split('/')[-1],origin=TRAIN_URL, cache_dir='.')test_path = tf.keras.utils.get_file(fname=TEST_URL.split('/')[-1],origin=TEST_URL, cache_dir='.')return train_path, test_pathdef load_data(y_name='Species'):train_path, test_path = maybe_download()train = pd.read_csv(train_path, names=CSV_COLUMN_NAMES, header=0)train_x, train_y = train, train.pop(y_name)test = pd.read_csv(test_path, names=CSV_COLUMN_NAMES, header=0)test_x, test_y = test, test.pop(y_name)return (train_x, train_y), (test_x, test_y)def train_input_fn(features, labels, batch_size):dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))dataset = dataset.shuffle(1000).repeat().batch(batch_size)return datasetdef eval_input_fn(features, labels, batch_size):features = dict(features)if labels is None:inputs = featureselse:inputs = (features, labels)dataset = tf.data.Dataset.from_tensor_slices(inputs)assert batch_size is not None, "batch_size must not be None"dataset = dataset.batch(batch_size)return datasetCSV_TYPES = [[0.0], [0.0], [0.0], [0.0], [0.0]]def _parse_line(line):fields = tf.decode_csv(line, record_defaults=CSV_TYPES)features = dict(zip(CSV_COLUMN_NAMES, fields))label = features.pop('Species')return features, labeldef csv_input_fn(csv_path, batch_size):dataset = tf.data.TextLineDataset(csv_path).skip(1)dataset = dataset.map(_parse_line)dataset = dataset.shuffle(1000).repeat().batch(batch_size)return dataset

训练学习的代码:

import argparse
import tensorflow as tf
import read_dataparse = argparse.ArgumentParser()
parse.add_argument('--batch_size', default=100, type=int,help='batch size')
parse.add_argument('--train_steps', default=1000, type=int,help='training steps')def main(argv):args = parse.parse_args(argv[1:])(train_x, train_y), (test_x, test_y) = read_data.load_data()my_feature_columns = []for key in train_x.keys():my_feature_columns.append(tf.feature_column.numeric_column(key=key))classifier = tf.estimator.DNNClassifier(feature_columns=my_feature_columns,hidden_units=[10, 10],n_classes=3,optimizer=tf.train.AdamOptimizer(learning_rate=0.01))classifier.train(input_fn=lambda: read_data.train_input_fn(train_x, train_y,args.batch_size),steps=args.train_steps)eval_result = classifier.evaluate(input_fn=lambda: read_data.eval_input_fn(test_x, test_y,args.batch_size))print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))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: read_data.eval_input_fn(predict_x,labels=None,batch_size=args.batch_size))template = ('\nPrediction is "{}" ({:.1f}%), expected "{}"')for pre_dict, expec in zip(predictions, expected):class_id = pre_dict['class_ids'][0]probability = pre_dict['probabilities'][class_id]print(template.format(read_data.SPECIES[class_id],100 * probability, expec))if __name__ == '__main__':tf.logging.set_verbosity(tf.logging.INFO)tf.app.run(main)

Tensorflow Estimator之DNNClassifier相关推荐

  1. TensorFlow estimator训练时 invalid continuation byte

    ** TensorFlow estimator训练时 报错:invalid continuation byte ** 报错:UnicodeDecodeError: 'utf-8' codec can' ...

  2. Tensorflow Estimator学习

    前沿 Tensorflow Estimator 最近在公司接触到, 也算是只有到工业界才会频繁接触的一种框架语言吧. 因为在工业界需要大数据和分布式处理,而本身它就是一种支持分布式训练和部署tenso ...

  3. Tensorflow Estimator之LinearRegressor

    LinearRegressor的基本格式 初始化 # 定义线性回归器 linear_regressor = tf.estimator.LinearRegressor(feature_columns=f ...

  4. TensorFlow Estimator 官方文档之----内置Estimator

    Premade Estimators 本文档介绍了 TensorFlow 编程环境,并展示了怎么用 Premade Estimators 来解决 Iris 分类问题. 文章目录 1. TensorFl ...

  5. TensorFlow Estimator 官方文档之----Feature column

    Feature column 本文档详细介绍了特征列(feature columns).您可以将特征列视为原始数据和 Estimator 之间的媒介.特征列非常丰富,使您可以将各种原始数据转换为 Es ...

  6. tensorflow estimator详细介绍,实现模型的高效训练

    estimator是tensorflow高度封装的一个类,里面有一些可以直接使用的分类和回归模型,例如tf.estimator.DNNClassifier,但这不是这篇博客的主题,而是怎么使用esti ...

  7. tensorflow estimator 实践

    本文以mnist数据集为例.estimator通常是和tf的dataset一起使用,故先制作tfrecord文件,在使用estimator进行测试. 文章结构: 1.文件目录 2. 制作tfrecor ...

  8. TensorFlow estimator详解

    1.框架 Estimator是属于High level的API Mid-level API分别是 -- Layers:用来构建网络结构.Datasets: 用来构建数据读取pipeline.Metri ...

  9. TensorFlow Estimator 教程之----快速入门

    TensorFlow 版本:1.10.0 > Guide > Introduction to Estimators Estimator 概述 本篇将介绍 TensorFlow 中的 Est ...

最新文章

  1. 线段树 ---- H. AND = OR (或和与的性质之1的个数 + 线段树)
  2. DTU详解解读 概念到功能应用
  3. EMC:欲占企业数据中心市场大半江山
  4. 马库斯开喷GPT-3:演员而已,它根本不知道自己在说什么
  5. es6 匿名函数求阶乘
  6. IE6中Form.submit不提交的问题
  7. 【PAT乙级】1066 图像过滤 (15 分)
  8. Eclipse中安装插件时提示:No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v20180706-1146
  9. 【C++】运算符重载 Operator Overload
  10. javaScript第一天(1)
  11. 全面屏手机有什么缺点?
  12. Luogu1613 跑路
  13. 实战CSS:苏宁商城静态实现
  14. 已测试:网上大神写的快手极速版脚本,autojs版快手极速版自动脚本下载
  15. codesys工程ST语言学习笔记(六)ST语言读写CVS文件excel格式(文件读写)
  16. SecureCRT配置详细图文教程
  17. CCD相机参数基本知识
  18. DiscuzQ_V3二次开发版本部署文档
  19. mysql cleaned up_关于mysqld自动停止的问题
  20. 副业怎么样通过手游达到月入过万

热门文章

  1. 【Caffe】利用log文件绘制loss和accuracy(转载)
  2. 机器学习入门笔记(四):朴素贝叶斯分类
  3. 实验2.2编写重载函数Max1
  4. Java中timer的schedule()和schedualAtFixedRate()函数的区别
  5. selenium的运行时异常
  6. leetcode719:直线上的第k近点对
  7. web服务器一些概念
  8. JAVA中的位运算符
  9. 【javajni】jni入门篇
  10. 跟着大彬读源码 - Redis 1 - 启动服务,程序都干了什么?