TensorFlowEstimator 类

定义

TensorFlowTransformer 在以下两种方案中使用。

  1. 使用预先训练 的 TensorFlow 模型评分:在此模式下,转换从预先训练的 Tensorflow 模型中提取隐藏层的值,并使用输出作为 ML.Net 管道中的特征。
  2. 重新训练 TensorFlow 模型:在此模式下,转换使用通过 ML.Net 管道传递的用户数据重新训练 TensorFlow 模型。 训练模型后,输出可以用作评分功能。
public sealed class TensorFlowEstimator : Microsoft.ML.IEstimator<Microsoft.ML.Transforms.TensorFlowTransformer>
type TensorFlowEstimator = class
    interface IEstimator<TensorFlowTransformer>
Public NotInheritable Class TensorFlowEstimator
Implements IEstimator(Of TensorFlowTransformer)
继承
TensorFlowEstimator
实现

注解

TensorFlowTransform 使用预先训练的 Tensorflow 模型提取指定的输出。 (可选)它可以进一步重新训练用户数据的 TensorFlow 模型,以调整用户数据上的模型参数 (也称为“传输学习”) 。

为了评分,转换采用预先训练的 Tensorflow 模型、输入节点的名称以及要提取其值输出节点的名称作为输入。 为了重新训练,转换还需要训练相关的参数,例如 TensorFlow 图中的优化操作名称、图形中的学习速率操作的名称及其值、图形中的操作名称,以计算损失和性能指标等。

此转换要求安装 Microsoft.ML.TensorFlow nuget。 TensorFlowTransform 对输入、输出、数据处理和重新训练有以下假设。

  1. 对于输入模型,目前 TensorFlowTransform 支持 冻结模型 格式和 SavedModel 格式。 但是,只有 SavedModel 格式才能重新训练模型。 检查点 格式目前既不支持评分,也不支持重新训练,因为缺少 TensorFlow C-API 支持加载它。
  2. 转换一次仅支持评分一个示例。 但是,可以分批执行重新训练。
  3. 高级传输学习/微调方案 (例如,在网络中添加更多层、更改输入形状、冻结在重新训练过程中不需要更新的层等。) 目前不可能,因为目前无法使用 TensorFlow C-API 在模型中支持网络/图形操作。
  4. 输入列的名称 (s) 应与 TensorFlow 模型中的输入 () 的名称匹配。
  5. 每个输出列的名称应与 TensorFlow 图中的某个操作匹配。
  6. 目前,double、float、long、int、short、sbyte、ulong、uint、ushort、byte 和 bool 是输入/输出的可接受数据类型。
  7. 成功后,转换将引入一个新列,该 IDataView 列对应于指定的每个输出列。

可以使用或summarize_graph工具获取 GetModelSchema() TensorFlow 模型的输入和输出。

方法

Fit(IDataView)

火车并返回一个 TensorFlowTransformer

GetOutputSchema(SchemaShape)

返回 SchemaShape 由转换器生成的架构。 用于管道中的架构传播和验证。

扩展方法

AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment)

将“缓存检查点”追加到估算器链。 这将确保针对缓存的数据训练下游估算器。 在执行多个数据传递的训练器之前,拥有缓存检查点会很有帮助。

WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>)

给定估算器后,返回将调用委托的 Fit(IDataView) 包装对象。 估算器通常必须返回有关拟合情况的信息,这就是为什么 Fit(IDataView) 该方法返回特定类型化对象的原因,而不仅仅是常规 ITransformer对象。 但是,同时, IEstimator<TTransformer> 通常形成为包含许多对象的管道,因此,我们可能需要通过 EstimatorChain<TLastTransformer> 估算器链生成一系列估算器,以便我们要获取转换器的估算器被埋在此链中的某个位置。 对于这种情况,我们可以通过此方法附加调用一次将调用的委托。

适用于