选自Medium

机器之心编译

参与:一鸣、李亚洲

今日,谷歌 TensorFlow 宣布推出神经结构学习(NSL)开源框架,它使用神经图学习方法来训练带有图和结构化数据的神经网络。

据谷歌 TensorFlow 博客介绍,NSL 是一个新手和高级开发人员都可以用来训练具有结构化信号神经网络的简易框架,可用于构建精确且稳健的视觉、语言理解和预测模型。

  • 项目地址:https://github.com/tensorflow/neural-structured-learning

结构化数据包含样本之间丰富的关系信息,许多机器学习任务都得益于此。例如,建模引用网络、句子语言学结构的知识图推断与推理,以及学习分子指纹,这些都需要模型来学习结构化输入,而不只是个别样本。这些结构可以是明确给出的(例如,作为图形),或者隐式推断的(例如,作为对抗性示例)。在训练阶段利用结构化信号可以使开发人员获得更高的模型准确度,尤其是当标记数据量相对较小时。谷歌的研究表明,使用结构化信号进行训练也可以带来更稳健的模型。图网络学习的一般流程。使用这些技术,谷歌极大的提升了模型性能,例如学习图像语义嵌入。神经结构学习(NSL)是一种用于训练具有结构化信号深度神经网络的开源框架。它实现了谷歌在论文《Neural Graph Learning: Training Neural Networks Using Graphs》中介绍的神经图学习,使开发人员能够使用图训练神经网络。这里的图可以是多样的,例如知识图、医疗记录、基因组数据或多模式关系(例如,图像 - 文本对)。此外,NSL 还可以应用到对抗性学习,也就是说输入样本之间的结构可以是使用对抗性扰动动态构建的。NSL 让 TensorFlow 用户能够轻松地结合各种结构化信号来训练神经网络,且适用于不同的学习场景:监督、半监督和无监督(表示)设置。NSL 如何工作在 NSL 框架中,结构化信息(如可以定义为图的数据或隐性的对抗样本),都可以被用来归一化神经网络的训练,使得模型学习精确地进行预测(通过最小化监督损失)。同时,保证从同一种结构中的所有输入保持同样的相似度(通过最小化近邻损失)。这种技术是可以泛化的,可以使用在神经网络架构上,如前向神经网络、卷积神经网络和循环神经网络等。

NSL 的基本架构。用 NSL 建立一个模型有了 NSL,建立一个使用结构化数据的模型就会很容易,而且非常直观。给定一个图(有具体结构)和训练样本,NSL 提供了相关的工具,用于将这些样本输入到 TFRcords 中,用于降采样操作。具体代码如下,可以使用相关的命令行工具将图和数据进行输入:

python pack_nbrs.py --max_nbrs=5 \labeled_data.tfr \unlabeled_data.tfr \graph.tsv \merged_examples.tfr

之后,NSL 提供了一些 API,可以将定制化的模型「打包起来」,将处理过的样本输入进去,使用图结构进行归一化操作。以下为具体代码:

import neural_structured_learning as nsl

# Create a custom model — sequential, functional, or subclass. 

base_model = tf.keras.Sequential(…)

# Wrap the custom model with graph regularization. 
graph_config = nsl.configs.GraphRegConfig(
 neighbor_config=nsl.configs.GraphNeighborConfig(max_neighbors=1)) 
graph_model = nsl.keras.GraphRegularization(base_model, graph_config)

# Compile, train, and evaluate. 

graph_model.compile(optimizer=’adam’, 
 loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[‘accuracy’]) 
graph_model.fit(train_dataset, epochs=5) 
graph_model.evaluate(test_dataset)
只需要额外的 5 行代码(包括注释),NSL 就可以将一个神经模型和图信号结合起来。从数据上来说,使用图结构可以让模型在训练中使用更少的标注数据,而且不会损失太多的准确率(和原有的监督学习相比只少 10% 甚至是 1%)。使用没有显式结构的图进行训练如果没有显形结构的图、或者不是作为输入的情况下,NSL 怎么训练呢?NSL 提供了相关的工具,用于从原始数据中建立一个图。另外,NSL 提供了相关的工具,用于从隐性结构信号中「推导」出对抗样本。对抗样本用于故意诱导模型,使得训练出的模型对于小的输入扰动更为鲁棒。以下为相关代码:

import neural_structured_learning as nsl # Create a custom model — sequential, functional, or subclass. base_model = tf.keras.Sequential(…)# Wrap the custom model with graph regularization. 

graph_config = nsl.configs.GraphRegConfig(               neighbor_config = nsl.configs.GraphNeighborConfig(max_neighbors=1)) 

graph_model = nsl.keras.GraphRegularization(base_model, graph_config) # Compile, train, and evaluate. 

graph_model.compile(optimizer=’adam’,                     loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=[‘accuracy’]) 

graph_model.fit(train_dataset, epochs=5) graph_model.evaluate(test_dataset)

通过少于额外 5 行代码(包括注释),就能获得一个使用带有隐性结构对抗样本训练的神经模型。根据经验,在没有对抗性样本的情况下,当将具有恶意但人类无法检测出的扰动数据添加到输入时,模型会遭受显著的准确度损失(例如,低 30%),加入对抗样本进行训练则可以避免这样的问题。原文地址:https://medium.com/tensorflow/introducing-neural-structured-learning-in-tensorflow-5a802efd7afd文为机器之心编译,转载请联系本公众号获得授权✄------------------------------------------------加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com投稿或寻求报道:content@jiqizhixin.com广告 & 商务合作:bd@jiqizhixin.com

tensorflow打印模型结构_五行代码用图提升模型表现,TensorFlow开源NSL神经结构学习框架...相关推荐

  1. cox风险回归模型参数估计_信用风险管理:分类模型和超参数调整

    cox风险回归模型参数估计 The final part aims to walk you through the process of applying different classificati ...

  2. tensorflow英语怎么读_英语不行?你可以试试TensorFlow官方中文版教程

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | 机器之心 现在 TensorFlow 有官方中文版教程啦,以前的英文版 Tutorials ...

  3. stacking模型融合_算法实践七:模型融合

    模型融合 用目前评分最高的模型作为基准模型,和其他模型进行stacking融合,得到最终模型以及评分结果. 考虑到时间问题,最优分箱和IV值计算先过,直接利用随机森林筛选出来的特征进行训练,只是实现整 ...

  4. 自定义模型 架构_品牌架构定义和模型的艺术,可帮助您摆脱混乱

    自定义模型 架构 My friend lived in a poorly renovated home in Fremantle, Western Australia. Like many house ...

  5. java内存模型浅析_浅谈java内存模型

    不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的.其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改.总结jav ...

  6. 比Keras更好用的机器学习“模型包”:0代码上手做模型

    做机器学习模型时,只是融合各种算法,就已经用光了脑细胞? 又或者觉得,数据预处理就是在"浪费时间"? 一位毕业于哥廷根大学.做机器学习的小哥也发现了这个问题:原本只是想设计个模型, ...

  7. python入门之控制结构-循环结构_(一)Python入门-4控制语句:05while循环结构-死循环处理...

    一:循环结构介绍 循环结构用来重复执行一条或多条语句.表达这样的逻辑:如果符合条件,则反 复执行循环体里的语句.在每次执行完后都会判断一次条件是否为 True,如果 为True则重复执行循环体里的语句 ...

  8. python开发的模型部署_使用Python部署机器学习模型的10个实践经验

    以下文章来源于AI公园,作者ronghuaiyang 导读 使用python部署ML项目的一些经验. 有时候,作为数据科学家,我们会忘记公司付钱让我们干什么.我们首先是开发人员,然后是研究人员,然后可 ...

  9. unity相机围绕模型转_围绕我们的业务模型和风险进行安全测试

    unity相机围绕模型转 When we create an environment and consider our security testing from development to pro ...

最新文章

  1. RUST等差分解一个数
  2. 浙江财经大学java试卷_2020年浙江财经大学社会保障考研真题试卷及试题答案,管理学考研试题下载...
  3. ListView数据项隔行换色控制实现详解
  4. python 矩阵常用计算
  5. C语言不好应该转专业吗,转专业后对于C语言补修的一些体会(1)
  6. android 手机固定mac,Android之获取手机MAC
  7. 协同过滤——基于模型的算法
  8. 图书馆可以提供哪些信息服务器,图书馆Web服务器的选择与配置.pdf
  9. rqnoj71 拔河比赛
  10. Ubuntu系统截图方法
  11. 【Delphi】Clipboard,剪贴板获取StringGrid所选的数据复制粘贴
  12. android 科技感动画,PPT最炫动画,3分钟学会超有科技感的扫描动画,轰动全场!...
  13. sob攻略超详细攻略_超详细西安旅游攻略
  14. 面对面教你如何用Python提取快递信息
  15. ipad的文件连接云服务器,ipad原来可以这样用(八):文件共享——也说说云端技术...
  16. 你有多久没有收到圣诞节的祝福了,你收到那个女孩(男孩)的祝福了吗?
  17. TPTP—详细说明讲解
  18. Github官网无法访问问题
  19. java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用?
  20. ant design vue时间范围(range-picker)自定义时间段范围

热门文章

  1. 基于JAVA+SpringBoot+Mybatis+MYSQL的酒店管理系统
  2. extjs的panel怎么自适应高度_Ext Js自适应高度
  3. 等差数列java_Java实现 LeetCode 413 等差数列划分
  4. ecplise git修改提交信息_Git提交信息规范化
  5. LevelDB的源码阅读(三) Get操作
  6. 2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III
  7. JQuery点击收起,点击展开以及部分非空小验证
  8. 判断字符串是数字、字符、还是...
  9. asp.net很有用的字符串操作类
  10. 09:向量点积计算【一维数组】