1 如何在 TFX 中使用 NSL 框架实现计算图正则化-德赢Vwin官网 网
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】欢迎添加关注!文章转载请注明出处。

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

    关注

    42

    文章

    4771

    浏览量

    100709
  • 计算图
    +关注

    关注

    0

    文章

    9

    浏览量

    6900
  • 正则化
    +关注

    关注

    0

    文章

    17

    浏览量

    8128
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60527

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

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

收藏 人收藏

    评论

    相关推荐

    何在智能手机系统中使用bq27505

    德赢Vwin官网 网站提供《如何在智能手机系统中使用bq27505.pdf》资料免费下载
    发表于 10-17 10:21 0次下载
    如<b class='flag-5'>何在</b>智能手机系统<b class='flag-5'>中使</b>用bq27505

    何在MSP430™MCU中使用智能模拟组合

    德赢Vwin官网 网站提供《如何在MSP430™MCU中使用智能模拟组合.pdf》资料免费下载
    发表于 09-14 10:19 0次下载
    如<b class='flag-5'>何在</b>MSP430™MCU<b class='flag-5'>中使</b>用智能模拟组合

    何在反向降压-升压拓扑中使用TPS6290x

    德赢Vwin官网 网站提供《如何在反向降压-升压拓扑中使用TPS6290x.pdf》资料免费下载
    发表于 09-13 10:07 0次下载
    如<b class='flag-5'>何在</b>反向降压-升压拓扑<b class='flag-5'>中使</b>用TPS6290x

    何在汽车CAN应用中使用负边缘触发触发器节省电力

    德赢Vwin官网 网站提供《如何在汽车CAN应用中使用负边缘触发触发器节省电力.pdf》资料免费下载
    发表于 09-13 10:06 0次下载
    如<b class='flag-5'>何在</b>汽车CAN应用<b class='flag-5'>中使</b>用负边缘触发触发器节省电力

    何在RTOS中使用spi_interface.c?

    何在 RTOS 中使用 spi_interface.c?
    发表于 07-10 06:29

    深度学习模型中的过拟合与正则

    测试数据或新数据上表现不佳的现象。为了解决这个问题,正则(Regularization)技术应运而生,成为深度学习中不可或缺的一部分。本文将从过拟合的原因、表现、正则的原理、方法及
    的头像 发表于 07-09 15:56 926次阅读

    何在IDF框架中使用自定义的静态库和动态库?

    基于商业需要,我们需要在 ESP-IDF v4.0-rc 这个版本的IDF中开发与使用自定义库,有如下问题请协助: 1如何利用IDF框架编写自定义静态库和动态库? 2如何在IDF框架中使
    发表于 06-25 07:57

    请问cmakelists中的变量如何在程序中使用?

    大家好, 我有个问题请教,cmakelists.txt中的变量如何在程序中使用?比如以下cmakelists.txt文件中的PROJECT_VER变量,我如何在c程序中使用?试了很多办
    发表于 06-11 07:34

    鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】

    `AppStartup`提供了一种更加简单高效的初始组件的方式,支持异步初始组件加速应用的启动时间。使用启动框架应用开发者只需要分别为待初始的组件
    的头像 发表于 06-10 18:38 699次阅读

    工业计算机是什么?如何在不同行业中使用?

    工业电脑是专为在工业环境中使用而设计的计算机。它们可用于各个行业,包括制造、运 输和能源。它们通常比普通计算机更强大,并且能够在大多数计算机无法运行的环境中运行。在本文中,我们将更深入
    的头像 发表于 04-01 15:45 789次阅读
    工业<b class='flag-5'>计算</b>机是什么?如<b class='flag-5'>何在</b>不同行业<b class='flag-5'>中使</b>用?

    何在测试中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大会 上分享了他如何在测试中使用 ChatGPT。
    的头像 发表于 02-20 13:57 745次阅读

    何在DAVE IDE中使用XMC7200?

    能否在 DAVE IDE 中为 XMC 7200 EVK KIT 构建应用程序。我尝试打开一个项目但它最多只能显示 XMC48000。如何在 DAVE IDE 中使用 XMC7200 请帮忙。
    发表于 01-26 06:32

    何在运行时计算设计中使用的时钟频率?

    我想知道如何在运行时计算设计中使用的时钟频率(设计使用时钟组件),尤其是组件内部的时钟,例如 UART。 例如,使用 clock_getSourceRegister () 返回
    发表于 01-24 06:09

    边缘计算平台开源框架有哪些类型

    边缘计算平台开源框架是指基于边缘计算概念开发的开源软件框架,用于构建和管理边缘计算平台。这些框架
    的头像 发表于 12-27 15:17 1303次阅读

    边缘计算框架有哪些

    应用的需求。边缘计算架构的出现,为各种行业提供了更高效、更灵活的计算和数据处理方式,有助于推动数字转型和智能发展。本文将详尽介绍边缘计算
    的头像 发表于 12-27 15:01 1466次阅读