1.定义

tf.estimator.Estimator(model_fn=model_fn) #model_fn是一个方法

2.定义model_fn:

    def model_fn_builder(self, bert_config, num_labels, init_checkpoint):
"""
:param bert_config:
:param num_labels:
:param init_checkpoint:
:param learning_rate:
:param num_train_steps:
:param num_warmup_steps:
:return:
"""
def model_fn(features, labels, mode, params):
"""
       这4个参数必须这样定义,就算是不用某个参数,也要把它定义出来
:param features: 是estimator传过来的feature
:param labels: 数据标签
:param mode: tf.estimator.TRAIN/tf.estimator.EVAL/tf.estimator.PREDICTION
:param params:这个暂时没弄懂
:return:
"""
input_ids = features['input_ids']
input_mask = features['input_mask']
segment_ids = features['segment_ids']
probabilities = self.creat_model(bert_config, input_ids, input_mask, segment_ids, num_labels) # 这里是重点,这里要定义模型和要取模型的什么值 tvars = tf.trainable_variables()
(assignment_map, initialized_variable_names) = modeling.get_assignment_map_from_checkpoint(tvars, init_checkpoint) # assignment_map是模型所有的变量字典,init_checkpoint为模型文件
tf.train.init_from_checkpoint(init_checkpoint, assignment_map) # 加载模型 output_spec = tf.estimator.EstimatorSpec(mode=mode, predictions=probabilities) # 应为上面已经从create_model中获取了我们要做什么op,获取什么值,prediction为op或值
return output_spec return model_fn
def get_assignment_map_from_checkpoint(tvars, init_checkpoint):
"""Compute the union of the current variables and checkpoint variables."""
assignment_map = {}
initialized_variable_names = {} name_to_variable = collections.OrderedDict()
for var in tvars:
name = var.name
m = re.match("^(.*):\\d+$", name)
if m is not None:
name = m.group(1)
name_to_variable[name] = var init_vars = tf.train.list_variables(init_checkpoint) assignment_map = collections.OrderedDict()
for x in init_vars:
(name, var) = (x[0], x[1])
if name not in name_to_variable:
continue
assignment_map[name] = name
initialized_variable_names[name] = 1
initialized_variable_names[name + ":0"] = 1 return (assignment_map, initialized_variable_names)
    def creat_model(self, bert_config, input_ids, input_mask, segment_ids, num_labels):
""" :param bert_config:
:param input_ids:
:param input_mask:
:param segment_ids:
:param num_labels:
:return:
"""
model = modeling.BertModel(
config=bert_config,
is_training=False,
input_ids=input_ids,
input_mask=input_mask,
token_type_ids=segment_ids,
use_one_hot_embeddings=False) output_layer = model.get_pooled_output() hidden_size = output_layer.shape[-1].value
    
    
    # 获得已经训练好的值  
output_weights = tf.get_variable(
"output_weights", [num_labels, hidden_size],
initializer=tf.truncated_normal_initializer(stddev=0.02)) output_bias = tf.get_variable(
"output_bias", [num_labels], initializer=tf.zeros_initializer()) logits = tf.matmul(output_layer, output_weights, transpose_b=True)
logits = tf.nn.bias_add(logits, output_bias)
probabilities = tf.nn.softmax(logits, axis=-1) return probabilities

2.使用estimator.predict

def predict(self, text_a, text_b):
""" :param text_a:
:param text_b:
:return:
""" def create_int_feature(values):
f = tf.train.Feature(int64_list=tf.train.Int64List(value=list(values)))
return f input_ids, input_mask, segment_ids = self.convert_single_example(text_a, text_b) features = collections.OrderedDict()
features['input_ids'] = create_int_feature(input_ids)
features['input_mask'] = create_int_feature(input_mask)
features['segment_ids'] = create_int_feature(segment_ids) tf_example = tf.train.Example(features=tf.train.Features(feature=features)) # 将feature转换为example self.writer.write(tf_example.SerializeToString())# 序列化example,写入tfrecord文件 result = self.estimator.predict(input_fn=self.predict_input_fn)
    def file_based_input_fn_builder(self):
""" :param examples:
:return:
"""
name_to_features = {
"input_ids": tf.FixedLenFeature([MAX_SEQ_LENGTH], tf.int64),
"input_mask": tf.FixedLenFeature([MAX_SEQ_LENGTH], tf.int64),
"segment_ids": tf.FixedLenFeature([MAX_SEQ_LENGTH], tf.int64),
} def decode_record(_examples, _name_to_feature):
""" :param _examples:
:param _name_to_feature:
:return:
""" return tf.parse_single_example(_examples, _name_to_feature) def input_fn():
""" :param params:
:return:
"""
d = tf.data.TFRecordDataset(self.predict_file) # 读取TFRecord文件
d = d.apply(
tf.data.experimental.map_and_batch(
lambda record: decode_record(record, name_to_features), # 将序列化的feature映射到字典上
batch_size=1,
drop_remainder=False)) return d # 这里返回的值会进入到定义estimator时的model_fn中,model_fn中的feature是d.get_next()的结果 return input_fn

1

tf.estimator.Estimator的更多相关文章

  1. tf.estimator.Estimator类的用法

    官网链接:https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator Estimator - 一种可极大地简化机器学习编程的高阶 ...

  2. 机器学习笔记5-Tensorflow高级API之tf.estimator

    前言 本文接着上一篇继续来聊Tensorflow的接口,上一篇中用较低层的接口实现了线性模型,本篇中将用更高级的API--tf.estimator来改写线性模型. 还记得之前的文章<机器学习笔记 ...

  3. tensorflow创建自定义 Estimator

    https://www.tensorflow.org/guide/custom_estimators?hl=zh-cn 创建自定义 Estimator 本文档介绍了自定义 Estimator.具体而言 ...

  4. Tensorflow1.4 高级接口使用(estimator, data, keras, layers)

    TensorFlow 高级接口使用简介(estimator, keras, data, experiment) TensorFlow 1.4正式添加了keras和data作为其核心代码(从contri ...

  5. TensorFlow 1.4利用Keras+Estimator API进行训练和预测

    Tensorflow 1.4中,Keras作为作为核心模块可以直接通过tf.keas进行调用,但是考虑到keras对tfrecords文件进行操作比较麻烦,而将keras模型转成tensorflow中 ...

  6. 4. Tensorflow的Estimator实践原理

    1. Tensorflow高效流水线Pipeline 2. Tensorflow的数据处理中的Dataset和Iterator 3. Tensorflow生成TFRecord 4. Tensorflo ...

  7. 使用 Estimator 构建卷积神经网络

    来源于:https://tensorflow.google.cn/tutorials/estimators/cnn 强烈建议前往学习 tf.layers 模块提供一个可用于轻松构建神经网络的高级 AP ...

  8. 创建自定义 Estimator

    ref 本文档介绍了自定义 Estimator.具体而言,本文档介绍了如何创建自定义 Estimator 来模拟预创建的 Estimator DNNClassifier 在解决鸢尾花问题时的行为.要详 ...

  9. TensorFlow之estimator详解

    Estimator初识 框架结构 在介绍Estimator之前需要对它在TensorFlow这个大框架的定位有个大致的认识,如下图示: 可以看到Estimator是属于High level的API,而 ...

随机推荐

  1. JDBC架构

    JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成: JDBC API: 提供了应用程序对JDBC的管理连接. JDBC Driver API: 支持JDBC管 ...

  2. QT源码查看001-QApplication和QCoreApplication

    QCoreApplication和QApplication的区别(1) QApplication这个类是继承QCoreApplication的,而QCoreApplication有继承QObject的 ...

  3. 关于java弱引用

    最近在学java虚拟机相关的东西,看了一篇微信的推送  在此分享https://mp.weixin.qq.com/s/oLhZWWWIVc90cNUBukkqHw 一.强引用 强引用就是我们经常使用的 ...

  4. LED点阵书写显示

    LED点阵书写显示屏   摘要:随着时代的发展,数字电子技术已经普及到我们生活,工作,科研,各个领域,而LED显示以其组构方式灵活.显示稳定.功耗低.寿命长.技术成熟.成本低廉等特点在车站.证券所.运 ...

  5. css中box-sizing简单说明(标准盒式模型和怪异盒式模型)

    今天写程序做布局的时候,遇到关于css中盒式模型的问题,百度了下这属性的解释,脑大啊,文字太绕看不懂.怎么办,于是自己动动手写了段程序测试,嗯,不错,一看效果就恍然大明白了.这里简单说明下,也可能说得 ...

  6. Chubby是什么?

    先简单的理解,以后补充: 为了解决hadoop分布式系统的一致性问题 ,有很多人提出很多protocol,其中就有有名的Paxos算法(Latex作者提出,算法需要学习), 但是Chubby并不是一个 ...

  7. Git的一些资源链接

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  8. Elasticsearch 系列3 --- Elasticsearch配置

    一. 位置 ES的配置文件位于安装目录\config下面,主要有 (1) elasticsearch.yml ES系统的配置: (2) jvm.options Java虚拟机配置: (3) log4j ...

  9. WordPress建站指南(1)

    写在前面: 3月份用10天零碎时间火速完成了建站,后台95%的工作都交给了WP(WordPress).如果想偷懒的话,WP是一个绝好的选择,估计有个小半天就建完收工了. 想有片自己的小花园,可是不会P ...

  10. .NET中的FileUpload控件的使用-Jquery(一)

    FileUpload在HTML中是个常用的基础控件,在涉及到上传各种格式的文件时候都会用到:笔者前段时间正好用到它做上传功能,记录下来做一些累积, 前端到后台用的是的Jquery中的Ajax进行数据传 ...