0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在 TFX 中使用 NSL 框架实现计算图正则化

Tensorflowers 来源:TensorFlow 作者: Arjun Gopalan 2020-10-31 11:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

神经架构学习 (Neural Structured Learning,NSL) 是 TensorFlow 中的一个框架,可以利用结构化信号来训练神经网络。这种框架接受 (i) 显式计算图或 (ii) 隐式计算图,处理结构化输入,并在模型训练过程中动态生成邻接点(Neighbors)。显式计算图的 NSL 通常用于基于神经网络的图学习(Neural Graph Learning),而隐式计算图的 NSL 通常用于 对抗学习。这两种技术均以 NSL 框架中的正则化形式实现。所以,它们只对训练工作流有影响,而工作流的模型保持不变。我们将在本文中探讨如何在 TFX 中使用 NSL 框架实现计算图正则化(Graph Regularization )。

神经架构学习
https://tensorflow.google.cn/neural_structured_learning

使用 NSL 构建计算图正则化模型的高级工作流包含以下步骤:

如果没有可用的计算图,则需要先构建一个计算图。

使用计算图和输入样本特征扩充训练数据。

使用扩充的训练数据对给定模型进行计算图正则化。

这些步骤不会立即映射到现有的 TFX (TensorFlow Extended) 流水线组件上。但是,TFX 支持自定义组件,允许用户在其 TFX 流水线中实现自定义处理。如需了解 TFX 中的自定义组件,请参阅这篇文章。

TFX
https://tensorflow.google.cn/tfx/guide#tfx_standard_components

自定义组件
https://tensorflow.google.cn/tfx/guide/understanding_custom_components

为了在 TFX 中创建一个包含上述步骤的计算图正则化模型,我们将利用扩展自定义 TFX 组件。

为展示如何使用 NSL,我们构建了一个示例 TFX 流水线,对 IMDB 数据集进行情感分类。我们提供了一个基于 Colab 的教程,演示了如何使用 NSL 与原生 TensorFlow 来完成这项任务,我们以此作为示例 TFX 流水线的基础。

IMDB 数据集
https://tensorflow.google.cn/datasets/catalog/imdb_reviews

Colab 教程
https://tensorflow.google.cn/neural_structured_learning/tutorials/graph_keras_lstm_imdb

自定义 TFX 组件的计算图正则化

为了在 TFX 中构建一个计算图正则化的 NSL 模型来完成这项任务,我们将使用自定义 Python 函数方法自定义三个组件。以下是使用这些自定义组件实现我们示例的 TFX 流水线示意图。为了简洁起见,我们省略了通常在 Trainer 之后的组件,例如 Evaluator、 Pusher 等。

自定义 Python 函数
https://tensorflow.google.cn/tfx/guide/custom_function_component

图 1:TFX 流水线示例:使用计算图正则化进行文本分类

在此图中,仅有自定义组件(粉色)与计算图正则化的 Trainer组件具备 NSL 相关逻辑。值得注意的是,此处展示的自定义组件仅作例证,还可以通过其他方式构建类似功能的流水线。接下来,我们进一步详细描述各个自定义组件,并展示相应的代码段。

IdentifyExamples

此自定义组件为每个训练样本分配一个唯一的 ID,将每个训练样本与其在计算图中相应的邻接点关联起来。

@component def IdentifyExamples( orig_examples: InputArtifact[Examples], identified_examples: OutputArtifact[Examples], id_feature_name: Parameter[str], component_name: Parameter[str] ) -> None: # Compute the input and output URIs. ... # For each input split, update the TF.Examples to include a unique ID. with beam.Pipeline() as pipeline: (pipeline | 'ReadExamples' >> beam.io.ReadFromTFRecord( os.path.join(input_dir, '*'), coder=beam.coders.coders.ProtoCoder(tf.train.Example)) | 'AddUniqueId' >> beam.Map(make_example_with_unique_id, id_feature_name) | 'WriteIdentifiedExamples' >> beam.io.WriteToTFRecord( file_path_prefix=os.path.join(output_dir, 'data_tfrecord'), coder=beam.coders.coders.ProtoCoder(tf.train.Example), file_name_suffix='.gz')) identified_examples.split_names = orig_examples.split_names return

make_example_with_unique_id() 函数可以更新给定样本,将包含唯一 ID 的额外特征包括在内。

SynthesizeGraph

如上所述,在 IMDB 数据集中,没有提供显式计算图作为输入。因此,在演示计算图正则化之前,我们将构建一个计算图。在此示例中,我们使用一个预训练的文本嵌入向量模型将电影评论中的原始文本转换为嵌入向量,然后通过生成的嵌入向量构建计算图。

SynthesizeGraph自定义组件负责处理计算图构建,请注意,它定义了一个新的Artifact,名为 SynthesizedGraph,作为此自定义组件的输出。

"""Custom Artifact type""" class SynthesizedGraph(tfx.types.artifact.Artifact): """Output artifact of the SynthesizeGraph component""" TYPE_NAME = 'SynthesizedGraphPath' PROPERTIES = { 'span': standard_artifacts.SPAN_PROPERTY, 'split_names': standard_artifacts.SPLIT_NAMES_PROPERTY, } @component def SynthesizeGraph( identified_examples: InputArtifact[Examples], synthesized_graph: OutputArtifact[SynthesizedGraph], similarity_threshold: Parameter[float], component_name: Parameter[str] ) -> None: # Compute the input and output URIs ... # We build a graph only based on the 'train' split which includes both # labeled and unlabeled examples. create_embeddings(train_input_examples_uri, output_graph_uri) build_graph(output_graph_uri, similarity_threshold) synthesized_graph.split_names = artifact_utils.encode_split_names( splits=['train']) return

create_embeddings() 函数通过 TensorFlow Hub 上的一些预训练模型将电影评论中的文本转换为相应的嵌入向量。build_graph() 函数调用 NSL 中的 build_graph()API。

TensorFlow Hub
https://tensorflow.google.cn/hub

build_graph()
https://tensorflow.google.cn/neural_structured_learning/api_docs/python/nsl/tools/build_graph

GraphAugmentation

此自定义组件的目的在于将样本特征(电影评论中的文本)与通过嵌入向量构建的计算图结合起来,生成一个扩充的训练数据集。由此得出的训练样本也将包括其相应邻接点的特征。

@component def GraphAugmentation( identified_examples: InputArtifact[Examples], synthesized_graph: InputArtifact[SynthesizedGraph], augmented_examples: OutputArtifact[Examples], num_neighbors: Parameter[int], component_name: Parameter[str] ) -> None: # Compute the input and output URIs ... # Separate out the labeled and unlabeled examples from the 'train' split. train_path, unsup_path = split_train_and_unsup(train_input_uri) # Augment training data with neighbor features. nsl.tools.pack_nbrs( train_path, unsup_path, graph_path, output_path, add_undirected_edges=True, max_nbrs=num_neighbors ) # Copy the 'test' examples from input to output without modification. ... augmented_examples.split_names = identified_examples.split_names return

split_train_and_unsup() 函数将输入样本拆分成带标签和无标签的样本,pack_nbrs() NSL API 创建扩充的训练数据集。

pack_nbrs()
https://tensorflow.google.cn/neural_structured_learning/api_docs/python/nsl/tools/pack_nbrs

计算图正则化的 Trainer

我们目前所有的自定义组件都已实现,TFX 流水线的Trainer 组件中增加了其他 NSL 相关的内容。下方展示了一个计算图正则化 Trainer 组件的简化视图。

... estimator = tf.estimator.Estimator( model_fn=feed_forward_model_fn, config=run_config, params=HPARAMS) # Create a graph regularization config. graph_reg_config = nsl.configs.make_graph_reg_config( max_neighbors=HPARAMS.num_neighbors, multiplier=HPARAMS.graph_regularization_multiplier, distance_type=HPARAMS.distance_type, sum_over_axis=-1) # Invoke the Graph Regularization Estimator wrapper to incorporate # graph-based regularization for training. graph_nsl_estimator = nsl.estimator.add_graph_regularization( estimator, embedding_fn, optimizer_fn=optimizer_fn, graph_reg_config=graph_reg_config) ...

如您所见,创建了基础模型后(本例中指一个前馈神经网络),就可以通过调用 NSL 封装容器 API 将其直接转换为计算图正则化模型。

一切就这么简单。现在,我们已补充完在 TFX 中构建计算图正则化 NSL 模型所需的步骤。此处提供了一个基于 Colab 的教程,在 TFX 中端到端地演示这个示例。不妨尝试一下,并可根据您的需要进行自定义。

此处
https://tensorflow.google.cn/tfx/tutorials/tfx/neural_structured_learning

对抗学习

如前文简介中所述,神经架构学习的另一个方面是对抗学习,即不使用计算图中的显式邻接点来进行正则化,而是动态、对抗性地创建隐式邻接点来迷惑模型。

因此,使用对抗样本进行正则化是提高模型鲁棒性的有效方式。使用神经架构学习的对抗学习可以轻松集成到 TFX 流水线中。无需任何自定义组件,只需要更新 Trainer 组件即可在神经架构学习中调用对抗正则化封装容器 API。

总结

我们演示了如何利用自定义组件在 TFX 中使用神经架构学习构建计算图正则化模型。当然,也可以用其他方式构建计算图,或者按照另外的方式来构建整体流水线。

我们希望这个示例能够为您构建自己的神经架构学习工作流提供帮助。

相关链接

有关神经架构学习的更多信息,请查阅以下资源:

TFX 中的 NSL Colab 教程
https://tensorflow.google.cn/tfx/tutorials/tfx/neural_structured_learning

NSL 网站
https://tensorflow.google.cn/neural_structured_learning

NSL GitHub
https://github.com/tensorflow/neural-structured-learning

更多 NSL 教程与视频
https://github.com/tensorflow/neural-structured-learning#videos-and-colab-tutorials

致谢:

我们特此鸣谢 Google 神经架构学习团队、TFX 团队以及 Aurélien Geron 的支持与贡献。

责任编辑:xj

原文标题:TensorFlow Extended + 神经架构学习:构建计算图正则化模型

文章出处:【微信公众号:TensorFlow】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4827

    浏览量

    106802
  • 计算图
    +关注

    关注

    0

    文章

    9

    浏览量

    7090
  • 正则化
    +关注

    关注

    0

    文章

    17

    浏览量

    8298
  • tensorflow
    +关注

    关注

    13

    文章

    331

    浏览量

    61857

原文标题:TensorFlow Extended + 神经架构学习:构建计算图正则化模型

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何在AMD Vitis Unified IDE中使用系统设备树

    您将在这篇博客中了解系统设备树 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 维护来自 XSA 的硬件元数据。本文还讲述了如何对 SDT 进行操作,以便在 Vitis Unified IDE 中实现
    的头像 发表于 11-18 11:13 2814次阅读
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系统设备树

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中导入模型后,需要设置其输入和输出接口以与您的设计进行适配。 1. 在Vivado HLS项目中导入模型文件 可以
    发表于 10-22 06:29

    请问如何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?

    何在 Keil μVision 或 IAR EWARM 中使用观察点进行调试?
    发表于 08-20 06:29

    请问如何通过 ADV7180 将 CCTV(模拟)摄像机与EZ-USB™ FX3 连接?

    逐行扫描的, 那么 FX3 是否可以直接处理这个问题(我正在寻求 AN75779 – 如何在EZ-USB™ USB视频类 (UVC) 框架中使用 FX3 实现图像传感器接口的帮助)或者
    发表于 07-25 07:42

    自动计算机经过加固后有什么好处?

    -40℃的寒冷环境中运行⁰C和温度达到85℃的灼热环境,这要归功于此类系统中使用的宽温度组件和被动冷却技术。2.抗冲击和振动自动计算机是工业级计算机,其设计和制造可
    的头像 发表于 07-21 16:44 427次阅读
    自动<b class='flag-5'>化</b><b class='flag-5'>计算</b>机经过加固后有什么好处?

    ArkUI-X框架LogInterface使用指南

    ArkUI-X框架支持日志拦截能力,Android侧提供原生接口,用于注入LogInterface接口,框架日志及ts日志通过该接口输出,本文的核心内容是介绍如何在Android平台上有效利用
    发表于 06-15 23:20

    纳芯微LED线性恒流驱动NSL21610 汽车级40V/单通道具备散热加强功能

    纳芯微LED线性恒流驱动NSL21610数据手册
    的头像 发表于 05-08 18:32 1289次阅读
    纳芯微LED线性恒流驱动<b class='flag-5'>NSL</b>21610   汽车级40V/单通道具备散热加强功能

    APP自动测试框架

    APP自动测试框架是一套结合工具链、设计模式和技术规范的集成解决方案。以下是基于主流技术实践的核心要点总结: 一、核心模块构成 环境管理‌ 支持物理机/虚拟机/容器部署,集成ADB、Appium
    的头像 发表于 05-07 07:35 427次阅读
    APP自动<b class='flag-5'>化</b>测试<b class='flag-5'>框架</b>

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Regmap子系统之Regmap框架结构

    Regmap 框架的主要分为物理总线、Regmap核心、Regmap API三部分组成。Regmap物理总线(Regmap Bus):Regmap物理总线是Regmap框架的底层物理接口,用于实现
    发表于 04-17 13:59

    恩智浦讲解如何在低算力MCU平台上优雅的计算均值和方差

    本文主要探讨如何在有限的计算能力和内存条件下,优雅地实现高效的均值和方差计算。通过优化算法、减少计算复杂度、利用递推公式和定点数运算,文章提
    的头像 发表于 03-06 08:56 1402次阅读
    恩智浦讲解如<b class='flag-5'>何在</b>低算力MCU平台上优雅的<b class='flag-5'>计算</b>均值和方差

    何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC)

    电子发烧友网站提供《如何在USB视频类(UVC)框架中使用EZ-USB™FX3实现图像传感器接口USB视频类(UVC).pdf》资料免费下载
    发表于 02-28 17:36 2次下载

    隔离电源方案电路框架

    隔离电源方案电路框架
    发表于 02-13 15:18 10次下载

    何在MATLAB中使用DeepSeek模型

    在 DeepSeek-R1(https://github.com/deepseek-ai/DeepSeek-R1) AI 模型横空出世后,人们几乎就立马开始询问如何在 MATLAB 中使用这些模型
    的头像 发表于 02-13 09:20 4064次阅读
    如<b class='flag-5'>何在</b>MATLAB<b class='flag-5'>中使</b>用DeepSeek模型

    xgboost的并行计算原理

    之一。 XGBoost简介 XGBoost是一种基于梯度提升框架的集成学习算法,它通过构建多个决策树来提高模型的预测性能。与传统的梯度提升树相比,XGBoost在算法上进行了优化,包括正则项的引入、缺失值的处理、剪枝操作等,这
    的头像 发表于 01-19 11:17 1579次阅读

    何在Windows中使用MTP协议

    、图片等)的通信协议,它被广泛用于Android设备。以下是如何在Windows中使用MTP协议的详细步骤: 1. 确保设备支持MTP 首先,你需要确认你的设备支持MTP协议。大多数现代Android
    的头像 发表于 01-03 10:26 4418次阅读