tf.estimator.Estimator

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

原文地址:https://www.cnblogs.com/callyblog/p/10216058.html

时间: 2024-09-30 20:40:17

tf.estimator.Estimator的相关文章

tf.estimator.Estimator类的用法

官网链接:https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator class Estimator(builtins.object)一 介绍Estimator 类,用来训练和验证 TensorFlow 模型.Estimator 对象包含了一个模型 model_fn,这个模型给定输入和参数,会返回训练.验证或者预测等所需要的操作节点.所有的输出(检查点.事件文件等)会写入到 model_dir,或者其子文件夹中.如果 mod

学习笔记TF044:TF.Contrib组件、统计分布、Layer、性能分析器tfprof

TF.Contrib,开源社区贡献,新功能,内外部测试,根据反馈意见改进性能,改善API友好度,API稳定后,移到TensorFlow核心模块.生产代码,以最新官方教程和API指南参考. 统计分布.TF.contrib.ditributions模块,Bernoulli.Beta.Binomial.Gamma.Ecponential.Normal.Poisson.Uniform等统计分布,统计研究.应用中常用,各种统计.机器学习模型基石,概率模型.图形模型依赖. 每个不同统计分布不同特征.函数,同

学习笔记TF043:TF.Learn 机器学习Estimator、DataFrame、监督器Monitors

线性.逻辑回归.input_fn()建立简单两个特征列数据,用特证列API建立特征列.特征列传入LinearClassifier建立逻辑回归分类器,fit().evaluate()函数,get_variable_names()得到所有模型变量名称.可以使用自定义优化函数,tf.train.FtrlOptimizer(),可以任意改动传到LinearClassifier. 随机森林.包含多个决策树分类器及回归算法.处理不平衡分类资料集,极大平衡误差.Kaggle数据科学竞赛,延伸版XGBoost.

学习笔记TF042:TF.Learn、分布式Estimator、深度学习Estimator

TF.Learn,TensorFlow重要模块,各种类型深度学习及流行机器学习算法.TensorFlow官方Scikit Flow项目迁移,谷歌员工Illia Polosukhin.唐源发起.Scikit-learn代码风格,帮助数据科学从业者更好.更快适应接受TensorFlow代码.囊括许多TensorFlow代码.设计模式,用户更快搭建机器学习模型实现应用.避免大量代码重复,把精力放在搭建更精确模型.与其他contrib模块无逢结合. 分布式Estimator.Estimator,各种各样

TensorFlow tf.estimator package not installed

在使用 pip install tensorflow 命令安装TensorFlow,在成功安装后,在 import tensorflow是出现 "tf.estimator package not installed" 解决方法如下: 1.确保 pandas, numpy, matplotlib 这些依赖包已经被正确安装 2.使用 pip install -U xxx --no-cache-dir (不使用缓存文件,重新网上下载安装) 3.如果更新相关依赖包后还没解决话的,就需要将 pa

import tensorflow 报错: tf.estimator package not installed.

import tensorflow 报错: tf.estimator package not installed. 解决方案1: 安装 pip install tensorflow-estimator==1.10.12 解决方案2: downgrade pandas from 0.23.4 to 0.23.0 upgrade matplotlib to 3.0.0 原文地址:https://www.cnblogs.com/sddai/p/10538807.html

TensorFlow文档翻译-01-TensorFlow入门

TensorFlow入门 这是关于如何开始tensorFlow的指南.开始之前,你需要先安装TensorFlow.除此之外,你应该了解: 知道如何使用Python编程. 懂一点点数组 如果具有机器学习的知识则更好.当然,如果你没有学习过机器学习,也应该先学习这个指引. TensorFlow提供了很多的API.底层的API,是TensorFlow的核心,可以提供完整的控制功能,推荐希望对自己的模型进行更加细粒度控制的机器学习研究人员使用.高层次的API,建立在底层核心API之上,比底层核心API更

TensorFlow 的使用步骤

使用 TensorFlow 的基本步骤 学习目标: 学习基本的 TensorFlow 概念 在 TensorFlow 中使用 LinearRegressor 类并基于单个输入特征预测各城市街区的房屋价值中位数 使用均方根误差 (RMSE) 评估模型预测的准确率 通过调整模型的超参数提高模型准确率 数据基于加利福尼亚州 1990 年的人口普查数据. 1. 设置 ????首先我们要import相应的库,做一些准备工作. import math from IPython import display

Effective Tensorflow[转]

Effective TensorFlow Table of Contents TensorFlow Basics Understanding static and dynamic shapes Scopes and when to use them Broadcasting the good and the ugly Feeding data to TensorFlow Take advantage of the overloaded operators Understanding order