本文将介绍如何将TensorRTSavedModel加载到TensorFlowEstimator?的详细情况,特别是关于如何导入tensorflow的相关信息。我们将通过案例分析、数据研究等多种方式,
本文将介绍如何将TensorRT SavedModel加载到TensorFlow Estimator?的详细情况,特别是关于如何导入tensorflow的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于135、TensorFlow SavedModel 工具类的使用、4. Tensorflow的Estimator实践原理、Anaconda3 tensorflow 安装 及 ModuleNotFoundError: No module named ''tensorflow'' 解答、import tensorflow 报错: tf.estimator package not installed.的知识。
本文目录一览:- 如何将TensorRT SavedModel加载到TensorFlow Estimator?(如何导入tensorflow)
- 135、TensorFlow SavedModel 工具类的使用
- 4. Tensorflow的Estimator实践原理
- Anaconda3 tensorflow 安装 及 ModuleNotFoundError: No module named ''tensorflow'' 解答
- import tensorflow 报错: tf.estimator package not installed.
如何将TensorRT SavedModel加载到TensorFlow Estimator?(如何导入tensorflow)
对于任何有兴趣的人,以下是我自己想出的解决方案: 通常,可以使用以下命令将TF SavedModel加载到Estimator:
estimator = tf.contrib.estimator.SavedModelEstimator(SAVED_MODEL_DIR)
但是,由于TensorRT将所有变量都转换为常量,因此在加载TensorRT时出现SavedModel错误,因此SavedModel目录中没有变量的信息(例如,没有variables.index)→由于Estimator尝试加载变量,因此不会发生错误。解决问题的步骤:
- 我们需要转到文件
"/usr/local/lib/python3.6/dist-packages/tensorflow_estimator/python/estimator/estimator.py",line 2330,in _get_saved_model_ckpt
并注释掉对variable.index的检查
"""if not gfile.Exists(os.path.join(saved_model_utils.get_variables_dir(saved_model_dir),compat.as_text('variables.index'))):
raise ValueError('Directory provided has an invalid SavedModel format: %s'
% saved_model_dir)"""
- 转到文件
"/usr/local/lib/python3.6/dist-packages/tensorflow_estimator/python/estimator/canned/saved_model_estimator.py",line 145,in __init__checkpoint_utils.list_variables(checkpoint)]
并进行更改,以使Estimator不会尝试从SavedModel加载变量:
"""checkpoint = estimator_lib._get_saved_model_ckpt(saved_model_dir) # pylint: disable=protected-access
vars_to_warm_start = [name for name,_ in
checkpoint_utils.list_variables(checkpoint)]
warm_start_settings = estimator_lib.WarmStartSettings(
ckpt_to_initialize_from=checkpoint,vars_to_warm_start=vars_to_warm_start)"""
warm_start_settings = estimator_lib.WarmStartSettings(ckpt_to_initialize_from = estimator_lib._get_saved_model_ckpt(saved_model_dir))
- 转到文件:
"/usr/local/lib/python3.6/dist-packages/tensorflow_estimator/python/estimator/canned/saved_model_estimator.py",line 256,in _model_fn_from_saved_modeltraining_util.assert_global_step(global_step_tensor)
,并注释掉“ global_step”的检查内容,以防模型是从NVIDIA示例生成的(因此无需进行任何培训并且未设置“ global_step”):
#global_step_tensor = training_util.get_global_step(g)
#training_util.assert_global_step(global_step_tensor)
- 转到文件:
"/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/checkpoint_utils.py",line 291,in init_from_checkpoint init_from_checkpoint_fn)
,然后将return放在init_from_checkpoint函数的开头,这样它就不会尝试加载检查点:
def _init_from_checkpoint(ckpt_dir_or_file,assignment_map):
"""See `init_from_checkpoint` for documentation."""
return
在完成所有上述更改之后,加载过程应该会很好。
135、TensorFlow SavedModel 工具类的使用
# SavedModelBuilder 类提供了保存多个MetaGraphDef的功能
# MetaGraph是一个数据流图,加上它的关联变量,资产和标签
# 一个MetaGraphDef是一个协议缓冲表示区
# 一个signature是计算图的输入和输出表示
# 如果assets需要被保存或者写入到磁盘上,当第一个MetaGraphDef被加载的时候
# asset就可以被提供
# 如果多个MetaGraphDef有相同的名字,只有第一个名字能够被持久化
# 每一个MetaGraphDef必须被打上用户标签
# 并且根据用户标签来加载和保存MetaGraphDef
# 随着变量的共享,这些标签标注了MetaGraphDef的功能,和在哪一个硬件上面运行的
import tensorflow as tf
export_dir = "tmp2/MetaGraphDir"
builder = tf.saved_model.builder.SavedModelBuilder(export_dir)
with tf.Session(graph=tf.Graph()) as sess:
builder.add_meta_graph_and_variables(sess,
["TRAINING"],
signature_def_map=foo_signatures,
assets_collection=foo_assets
)
# Add a sencod MetaGraphDef for inference
with tf.Session(graph=tf.Graph()) as sess:
builder.add_meta_graph(["SERVING"])
builder.save()
4. Tensorflow的Estimator实践原理
1. Tensorflow高效流水线Pipeline
2. Tensorflow的数据处理中的Dataset和Iterator
3. Tensorflow生成TFRecord
4. Tensorflow的Estimator实践原理
1. 前言
前面博文介绍了Tensorflow的一大块,数据处理,今天介绍Tensorflow的高级API,模型的建立和简化过程。
2. Estimator优势
本文档介绍了Estimator一种可极大地简化机器学习编程的高阶TensorFlow API。用了Estimator你会得到数不清的好处。
- 您可以在本地主机上或分布式多服务器环境中运行基于 Estimator 的模型,而无需更改模型。此外,您可以在CPU、GPU或TPU上运行基于Estimator 的模型,而无需重新编码模型。
- 使用dataset高效处理数据,搭配上Estimator再GPU或者TPU上高效的运行模型,提高整体的模型运行的时间。
- 使用Estimator编写应用时,您必须将数据输入管道从模型中分离出来。这种分离简化了不同数据集的实验流程。
- Estimator提供安全的分布式训练循环,可以控制如何以及何时:
- 构建图
- 初始化变量
- 开始排队
- 处理异常
- 创建检查点文件并从故障中恢复
- 保存 TensorBoard 的摘要
- Estimator简化了在模型开发者之间共享实现的过程。
- 您可以使用高级直观代码开发先进的模型。简言之,采用Estimator创建模型通常比采用低阶TensorFlow API更简单。
- Estimator本身在tf.layers之上构建而成,可以简化自定义过程。
3. 预创建的Estimator
- 编写一个或多个数据集导入函数。
- 一个字典,其中键是特征名称,值是包含相应特征数据的张量(或 SparseTensor)
- 一个包含一个或多个标签的张量
def input_fn(dataset):
# manipulate dataset, extracting the feature dict and the label
return feature_dict, label
- 定义特征列。每个tf.feature_column都标识了特征名称、特征类型和任何输入预处理操作。
# Define three numeric feature columns.
population = tf.feature_column.numeric_column(''population'')
crime_rate = tf.feature_column.numeric_column(''crime_rate'')
median_education = tf.feature_column.numeric_column(''median_education'',
normalizer_fn=lambda x: x - global_education_mean)
- 实例化相关的预创建的Estimator。 例如,下面是对名为LinearClassifier的预创建Estimator进行实例化的示例代码:
# Instantiate an estimator, passing the feature columns.
estimator = tf.estimator.LinearClassifier(
feature_columns=[population, crime_rate, median_education],
)
- 调用训练、评估或推理方法。例如,所有 Estimator 都提供训练模型的 train 方法。
# my_training_set is the function created in Step 1
estimator.train(input_fn=my_training_set, steps=2000)
4. 自定义Estimator
4.1 input_fn输入函数
输入函数可以直接返回feature_dict, label,也可以返回的是dataset.make_one_shot_iterator(),这样就和我们高效的数据预处理接上了。
def input_fn(features, labels, batch_size):
"""An input function for training"""
# Convert the inputs to a Dataset.
dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
# Shuffle, repeat, and batch the examples.
dataset = dataset.shuffle(1000).repeat().batch(batch_size)
# Return the read end of the pipeline.
return dataset.make_one_shot_iterator().get_next()
4.2 feature_columns创建特征列
您必须定义模型的特征列来指定模型应该如何使用每个特征。无论是使用预创建的Estimator还是自定义Estimator,您都要使用相同的方式定义特征列。
以下代码为每个输入特征创建一个简单的 numeric_column,表示应该将输入特征的值直接用作模型的输入:
# 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))
4.3 model_fn模型函数
def model_fn(
features, # This is batch_features from input_fn
labels, # This is batch_labels from input_fn
mode, # An instance of tf.estimator.ModeKeys
params): # Additional configuration
前两个参数是从输入函数中返回的features和labels,mode参数表示调用程序是请求训练、预测还是评估。所以在model_fn里面需要实现训练、预测、评估3种请求方式。
调用程序可以将params传递给Estimator的构造函数。传递给构造函数的所有params 转而又传递给model_fn。
classifier = tf.estimator.Estimator(
model_fn=my_model,
params={
''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,
})
5. 定义模型
5.1 定义输入层
在 model_fn 的第一行调用 tf.feature_column.input_layer,以将特征字典和 feature_columns 转换为模型的输入,会应用特征列定义的转换,从而创建模型的输入层。如下所示:
# Use `input_layer` to apply the feature columns.
net = tf.feature_column.input_layer(features, params[''feature_columns''])
5.2 隐藏层
如果您要创建深度神经网络,则必须定义一个或多个隐藏层。Layers API 提供一组丰富的函数来定义所有类型的隐藏层,包括卷积层、池化层和丢弃层。
隐藏层是用户自己发挥想象力,定义的可以很复杂的地方。
# Build the hidden layers, sized according to the ''hidden_units'' param.
for units in params[''hidden_units'']:
net = tf.layers.dense(net, units=units, activation=tf.nn.relu)
5.3 输出层
# Compute logits (1 per class).
logits = tf.layers.dense(net, params[''n_classes''], activation=None)
tf.nn.softmax 函数会将这些对数转换为概率。
5.4 实现训练、评估和预测
创建模型函数的最后一步是编写实现预测、评估和训练的分支代码。
重点关注第三个参数 mode。如下表所示,当有人调用train、evaluate或predict时,Estimator框架会调用模型函数并将mode参数设置为ModeKeys.TRAIN,ModeKeys.EVAL,ModeKeys.PREDICT。
模型函数必须提供代码来处理全部三个mode值。对于每个mode值,您的代码都必须返回 tf.estimator.EstimatorSpec的一个实例,其中包含调用程序所需的信息。我们来详细了解各个mode。
- 训练 ModeKeys.TRAIN
构建训练操作需要优化器。我们将使用 tf.train.AdagradOptimizer。 我们使用优化器的 minimize 方法根据我们之前计算的损失构建训练操作。 minimize 方法还具有 global_step 参数。
optimizer = tf.train.AdagradOptimizer(learning_rate=0.1)
train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step())
if mode == tf.estimator.ModeKeys.TRAIN:
return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)
- 评估 ModeKeys.EVAL
虽然返回指标是可选的。TensorFlow 提供一个指标模块 tf.metrics 来计算常用指标。为简单起见,我们将只返回准确率。
# Compute evaluation metrics.
accuracy = tf.metrics.accuracy(labels=labels,
predictions=predicted_classes,
name=''acc_op'')
metrics = {''accuracy'': accuracy}
tf.summary.scalar(''accuracy'', accuracy[1])
if mode == tf.estimator.ModeKeys.EVAL:
return tf.estimator.EstimatorSpec(
mode, loss=loss, eval_metric_ops=metrics)
- 预测 ModeKeys.PREDICT
该模型必须经过训练才能进行预测。经过训练的模型存储在磁盘上,位于您实例化 Estimator 时建立的 model_dir 目录中。
此模型用于生成预测的代码如下所示:
# Compute predictions.
predicted_classes = tf.argmax(logits, 1)
if mode == tf.estimator.ModeKeys.PREDICT:
predictions = {
''class_ids'': predicted_classes[:, tf.newaxis],
''probabilities'': tf.nn.softmax(logits),
''logits'': logits,
}
return tf.estimator.EstimatorSpec(mode, predictions=predictions)
predictions 存储的是下列三个键值对:
- class_ids 存储的是类别 ID(0、1 或 2),表示模型对此样本最有可能归属的品种做出的预测。
- probabilities 存储的是三个概率(在本例中,分别是 0.02、0.95 和 0.03)
- logit 存储的是原始对数值(在本例中,分别是 -1.3、2.6 和 -0.9)
我们通过 predictions 参数(属于 tf.estimator.EstimatorSpec)将该字典返回到调用程序。Estimator 的 predict 方法会生成这些字典。
6. 实例化Estimator
通过 Estimator 基类实例化自定义 Estimator,如下所示:
# Build 2 hidden layer DNN with 10, 10 units respectively.
classifier = tf.estimator.Estimator(
model_fn=my_model,
params={
''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,
})
在这里,params 字典与 DNNClassifier 的关键字参数用途相同;即借助 params 字典,您无需修改 model_fn 中的代码即可配置 Estimator。
使用 Estimator 训练、评估和生成预测要用的其余代码与预创建的 Estimator 一章中的相同。例如,以下行将训练模型:
# Train the Model.
classifier.train(
input_fn=lambda:iris_data.train_input_fn(train_x, train_y, args.batch_size),
steps=args.train_steps)
7. 工作流程
- 假设存在合适的预创建的Estimator,使用它构建第一个模型并使用其结果确定基准。
- 使用此预创建的Estimator构建和测试整体管道,包括数据的完整性和可靠性。
- 如果存在其他合适的预创建的Estimator,则运行实验来确定哪个预创建的Estimator效果最好。
- 可以通过构建自定义Estimator进一步改进模型。
Anaconda3 tensorflow 安装 及 ModuleNotFoundError: No module named ''tensorflow'' 解答
Anaconda3 的安装,参考:手把手教你如何安装 Tensorflow(Windows 和 Linux 两种版本)
tensorflow 的安装,参考:深度学习(TensorFlow)环境搭建:(三)Ubuntu16.04+CUDA8.0+cuDNN7+Anaconda4.4+Python3.6+TensorFlow1.3
我选的是 CPU 下的安装,参考以上链接安装,如果出现:
①下载的 TensorFlow 对应的 Python 版本一定要和 conda create -n tensorflow python=x.x 的版本一样才行
②在 anaconda3 的包下搜索 "tensorflow",如果搜到,说明是路径没找到 tensorflow.
我的 tensorflow 路径:
需要将该路径临时加入到 sys.path 中:
进入 python 中:
import sys
sys.path #查看 sys.path
sys.path.append("")
import tensorflow # 没有报错
需要将该路径永久加入到 sys.path 中:
在下添加一个路径文件如:mypypath.pth , 必须以.pth 为后缀。
vi mypypath.pth
然后写入:,并保存关闭。
再次进入 python 中:
import tensorflow # 没有报错
参考:
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
关于如何将TensorRT SavedModel加载到TensorFlow Estimator?和如何导入tensorflow的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于135、TensorFlow SavedModel 工具类的使用、4. Tensorflow的Estimator实践原理、Anaconda3 tensorflow 安装 及 ModuleNotFoundError: No module named ''tensorflow'' 解答、import tensorflow 报错: tf.estimator package not installed.的相关知识,请在本站寻找。
本文标签: