学习笔记TF042:TF.Learn、分布式Estimator、深度学习Estimator
TF.Learn,TensorFlow重要模块,各种类型深度学习及流行机器学习算法。TensorFlow官方Scikit Flow项目迁移,谷歌员工Illia Polosukhin、唐源发起。Scikit-learn代码风格,帮助数据科学从业者更好、更快适应接受TensorFlow代码。囊括许多TensorFlow代码、设计模式,用户更快搭建机器学习模型实现应用。避免大量代码重复,把精力放在搭建更精确模型。与其他contrib模块无逢结合。
分布式Estimator。Estimator,各种各样机器学习、深度学习类。可以直接用这些高阶类,也可以根据实际应用需求快速创建子类。graph_actions模块,Estimator在训练、评估模型复杂分布式逻辑被实现、浓缩,不需要复杂Supervisor、Coordinator分布式训练具体实现细节、逻辑。
Estimator接受自定义模型,函数答名(入参字段->返回字段):(1)(features,targets)->(predictions,loss,train_op)。(2)(features,targets,mode)->(predictions,loss,train_op)。(3)(features,targets,mode,params)->(predictions,loss,train_op)。
自定义模型接受两个参数:features和targets。features,数据特征。targets数据特征每行目标或分类标识。tf.one_hot对targets独热编码(One-hot Encoding)。layers.stack叠加多层layers.fully_connected完全连接深度神经网络,每层分别10、20、10个隐藏节点,不同层转换、训练,得到新数据特征。models.logistic_regression_zero_init加一层,0初始参数值逻辑回归模型,得到预测值、损失值。contrib.layers.optimize_loss函数优化损失值,根据需要选择不同优化函数和学习速率。optimize_loss训练算子(Training Operator),每次训练迭代优化模型参数和决定模型发展方向。返回预测值、预测概率,或其中一个。
iris数据分类。Scikit-learn datasets引入数据,cross_validation数据分训练、评估。my_model放learn.Estimator,Scikit-learn风格fit、predict函数。快速定义自己的模型函数,直接利用Estimator各种功能,直接分布式模型训练,不用担心实现细节。
模式(Mode)定义函数,常用模式training、evaluation、prediction,可以在ModeKeys找到。加条件语句实现复杂逻辑。params调节参数,fit函数可以给更多参数。
建立机器学习Estimator。BaseEstimator最抽象最基本实现TensorFlow模型训练、评估类。fit()模型训练,partial_fit()线上训练,evaluate()评估模型,predict()使用模型预测新数据。graph_actions复杂逻辑模型训练、预测。SuperVisor、Coordinator、QueueRunner,分布式训练、预测。learn.DataFeeder、learn.DataFrame类自动识别、处理、迭代不同类型数据。estimators.tensor_signature对数据进行兼容性判断(稀疏张量Sparse Tensor),数据读入更方便、稳定。BaseEstimator对learn.monitors及模型存储进行初始化设置。learn.monitors监测模型训练。
BaseEstimator,_get_train_ops()、_get_eval_ops()、_get_predict_ops()子类实现。
Estimator,_get_train_ops()接受features、targets参数,自定义模型函数返回Operation、损失Tensor Tuple,在每个训练迭代优化模型参数。非监督学习模型Estimator,忽略targets。
_get_eval_ops(),BaseEstimator子类自定义metrics评估每个模型训练迭代。contrib.metrics。自定义metrics函数返回一个Tensor对象Python字黄代表评估Operation,每次迭代用到。
自定义模型对新数据预测、计算损失值,ModeKeys EVAL表明函数只在评估用。contrib.metrics模块,streaming_mean对loss计算平均流,之前计算过平均值加这次迭代损失值再计算平均值。
_get_predict_ops()实现自定义预测。对预测结果进一步处理。预测概率转换简单预测结果,概率平滑加工(Smooting)。函数返回Tensor对象Python字典代表预测Operation。Estimator predict()函数,Estimator分布式功能。非监督模型,类似Sckkit-learn transform()函数。
逻辑回归(LogisticRegressor),Estimator提供绝大部分实现,LogisticRegressor只需提供自己的metrics(AUC、accuracy、precision、recall,处理二分类问题),快速在LogiticRegressor基础写子类实现个性化二分类Estimator,不需要关心其他逻辑实现。
TF.Learn 随机森林模型TensorForestEstimator许多细节实现在contrib.tensor_forest。只利用、暴露高阶需要用到成分到TensorForestEstimator。超参数通过contrib.tensor_forest.ForestHParams传到构造函数params,构造函数params.fill()建造随机森林TensorFlow图,tensor_forest.RandomForestGraphs。
实现复杂,需要高效率,细节用C++实现单独Kernel。_get_predict_ops()函数,tensor_forest内部C++实现data_ops.ParseDataTensorOrDict()函数检测、转换读入数据到可支持数据类型,RandomForestGraphs inference_graph函数得到预测Operation。
_get_train_ops()、_get_eval_ops()函数分别调用RandomForestGraphs.trainning_loss()、RandomForestGraphs.onference_graph()函数,data_ops.ParseDataTensorOrDict、data_ops.ParseLabelTensorOrDict分别检测、转换features、targets到兼容数据类型。
调节RunConfig运行时参数。RunConfig,TF.Learn类,调节程序运行时参数。num_cores选择使用核数量,num_ps_replicas调节参数服务器数量,gpu_memory_fraction控制使用GPU存储百分比。
RunConfig master参数,指定训练模型主服务器地址,task设置任务ID,每个任务ID控制一个训练模型参数服务器replica。
初始化一个RunConfig对象,传进Estimator。RunConfig参数默认值在本地运行简单模型,只用一个任务ID,80%GPU存储参数传进Estimator。运行时参数会自动运用,不用担心ConfigProto、GPUOptions细节。快速改变参数实现分布式模型训练、参数服务器使用。
Experiment,简单易用建立模型实验类,建模所需所有信息,Estimator、训练数据、评估数据、平估指标、监督器、评估频率。可以选择当地运行,可以和RunConfig配合分布式试验。LearnRunner,方便做实验。
tf.app.flags定义可以从命令行传入参数,数据、模型、输出文件路径、训练、评估步数。schedule试验类型。local_run()当地试验。run_std_server()标准服务器试验。master_grpc_url主要GRPC TensorFlow服务器。num_parameter_servers参数服务器数量。
建立Experiment对象函数,FLAGS建立RunConfig,机器学习模型Estimator,建立广度深度结合分类器(DNNLinearCombinedClassifier)。input_train_fn、input_test_fn,数据来源、提供训练、评估数据。
create_experiment_fn()函数传入LearnRunner进行不同类型试验,当地、服务器试验。试验结果存储到不同路径。
深度学习Estimator。TF.Learn包含简单易用深度神经网络Estimator。分类问题DNNClassifier。_input_fn()建立数据,layers模块建立特征列。
特征列、每层隐藏神经单元数、标识类别数传入DNNClassifier,迅速建立深度神经网络模型。
fit()、evaluate()方法模型训练、评估。
每行数据都有权重。DNNClassfier,指定一列为权重列,自动分配到训练过程。四行数据,每行不同权重。权重列、特征列放入features。
DNNClassifier表明权重列列名 w,特征列列名x(x转换特征列)。
传入自定义metrics方程_my_metric_op(),操作predictions、targets进行metrics计算。只考虑二分类问题,tf.slice()剪切predictions第二列作预测值。
tf.slice()传入输入矩阵input,剪切开始元素begin,剪切Tensor形状size,size[i]代表第i个维度想剪切矩阵shape。
根据需求任意在predictions、targets操作实现想要metrics计算,evaluate()传入metrics函数,TF.Learn根据metrics评估模型。
evaluate()可以提供多个metrics,_my_metric_op自定义,tr.contrib自带。
optimizer提供自定义函数,定义自己的优化函 ,包含指数递减学习率。
tf.contrib.framework.get_or_create_global_step()得到目前模型训练到达全局步数。tf.train.exponential_decay()对学习率指数递减,避免爆炸梯度。
广度深度模型,DNNLinearCombinedClassifier。谷歌广泛用在各种机器学习应用,深度神经网络和逻辑回归结合,不同特征通过两种不同方式结合,更能体现应用意义和更有效推荐结果。类似Kaggle竞赛Ensemble。
更多参数,与DNNClassifier、LinearClassifier不同特征列选择。
gender、education、relationship、workclass转换为FeatureColumn。分wide_columns、deep_columns。wide_columns用在LinearClassifier,deep_columns用在DNNClassifier。分别传入DNNLinearCombinedClassifier建立广度深度模型。具有线性特征,也具有深度神经网络特征。
参考资料:
《TensorFlow实战》
欢迎付费咨询(150元每小时),我的微信:qingxingfengzi
学习笔记TF042:TF.Learn、分布式Estimator、深度学习Estimator的更多相关文章
- 学习笔记TF043:TF.Learn 机器学习Estimator、DataFrame、监督器Monitors
线性.逻辑回归.input_fn()建立简单两个特征列数据,用特证列API建立特征列.特征列传入LinearClassifier建立逻辑回归分类器,fit().evaluate()函数,get_var ...
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络
介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络
一.深层神经网络 深层神经网络的符号与浅层的不同,记录如下: 用\(L\)表示层数,该神经网络\(L=4\) \(n^{[l]}\)表示第\(l\)层的神经元的数量,例如\(n^{[1]}=n^{[2 ...
- UFLDL深度学习笔记 (三)无监督特征学习
UFLDL深度学习笔记 (三)无监督特征学习 1. 主题思路 "UFLDL 无监督特征学习"本节全称为自我学习与无监督特征学习,和前一节softmax回归很类似,所以本篇笔记会比较 ...
- 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
AI早期成就,相对朴素形式化环境,不要求世界知识.如IBM深蓝(Deep Blue)国际象棋系统,1997,击败世界冠军Garry Kasparov(Hsu,2002).国际象棋,简单领域,64个位置 ...
- 深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全
深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全 原文地址:Image Completion with Deep Learning in TensorFlow by Bra ...
- 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...
- 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF
随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...
- Vue学习笔记-Django REST framework3后端接口API学习
一 使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7 (Windows x86- ...
随机推荐
- 在myeclipse中使用log4j记录日志
1.从官方网站下载 jakarta-log4j-1.2.17.tar.gz http://logging.apache.org/log4j/1.2/download.html 2.在eclipse中将 ...
- Machine Learning--week4 神经网络的基本概念
之前的学习成果并不能解决复杂的非线性问题 Neural Networks Sigmoid(logistic) activation function: activation function is a ...
- The SOLID principles(未完,待续)
The SOLID principles The SOLID principles of Object Oriented Design include these five principles: S ...
- 2、haproxy配置参数详解
代理相关配置参数 内容参考自马哥教育 HAProxy官方文档 https://cbonte.github.io/haproxy-dconv/2.0/configuration.html URI Syn ...
- [福建集训2011][LOJ10111]相框
这题主要还是分类讨论欧拉回路 首先对于导线一端没有东西的新建一个节点 由于原图不一定连通所以需要用到并查集判断有多少个连通块 将一条导线连接的两个焊点连接 然后先对于只有一个连通块考虑 1.如果一个焊 ...
- 解决github访问及上传慢的问题
在本地host文件中添加映射 http://tool.chinaz.com/dns , 查询 github.global.ssl.fastly.net 和 assets-cdn.github.com ...
- windows 多用户登陆设置
在 “运行”中输入gpedit.msc打开“本地组策略编辑器” | 计算机配置 | 管理模板 | windows 组件 | 远程桌面服务 | 远程桌面会话主机 | 连接 | 限制连接的数量 | 编辑 ...
- URI和URL之间的区别
URI的全称为统一资源标识符(Uniform Resource Identifier),是一个用于标识某一互联网资源名称的字符串. 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交 ...
- JavaScript基础四
1.13 Js中的面向对象 1.13.1 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或 ...
- 如何 distinct 只对一个字段有用,同时查出其他字段
转至:http://blog.csdn.net/u013402772/article/details/51262524 在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有d ...