前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TensorFlow Hub:探索机器学习组件化

TensorFlow Hub:探索机器学习组件化

作者头像
云水木石
发布2019-07-02 14:38:11
8230
发布2019-07-02 14:38:11
举报

在硬件设计领域,模块化设计是通用的设计准则,特别是大规模集成电路出现之后,硬件工程师并不需要从头设计,而是寻找合适的模块,将它们组合起来,完成所需的功能。软件设计领域也同样如此,比如Windows时代的COM组件、中间件,等等。当然,由于软件的灵活性和复杂性,无法做到像硬件领域集成度那么高,但这种思想始终会影响到软件设计方式。比如今天,做前端的软件设计人员,可能会在代码中用到JQuery、Bootstrap等框架。Android开发人员可能会使用Taurus、ActionBarSherlock、Android-Universal-Image-Loader之类的UI组件。

机器学习是一个近几年来迅速崛起的领域,得到了广大开发人员的关注。然而,开发出一个新的机器模型并不容易,首先需要深厚的机器学习理论知识,其次需要大量的训练数据(对于深度学习,尤其如此),最后,训练一个模型往往需要消耗大量的运算力,特别是对GPU的要求非常高。当然,机器学习也属于软件设计领域,所以采用组件化模式也是自然而然的方法。

机器学习可以在三个层次上进行模块化:

  • 最上面一层,应用层,可以提供高度封装好的功能接口,使用者甚至无需任何机器学习背景知识,对外接口也可以看不出采用了机器学习算法。比如,face++提供的人脸识别、阿里云提供的鉴黄服务等等。
  • 在最底层面,框架层,可以提供梯度递减算法、softmax、卷积运算等等,这些是构建深度学习必要的基础组件,但开发者必须设计模型、训练模型,需要有深厚的机器学习背景知识,以及大量的数据。
  • 在中间层,可以提供训练好的模型,使用者可以在项目中直接加载模型,也可以在自己的数据集上对模型进行再训练,实现个性化需求。这种方法不再需要海量数据,就可以获得不错的性能。

组件所在的层级越高,接口越简单,使用越方便,但灵活度降低,只适合非常通用的场景。层级越低,灵活性越高,但编写和训练模型就越复杂。所以处在中间层级的模型组件化能够在复杂性和灵活性之间取得很好的平衡。

TensorFlow Hub是一个发布、发现和重用TensorFlow模型的平台,致力于TensorFlow机器学习模型的组件化。很重要的是TensorFlow Hub基于Web技术,开发者只需要通过浏览器就可以搜索、浏览TensorFlow模型。下面我们来看看在TensorFlow Hub上可以做哪些事情。

探索和发现模块

图1:提供了模块的详细信息、访问其tfhub.devURL的简便方法,还可以直接打开Colab Notebook。

TensorFlow Hub是一个共享可重用机器学习模型的平台,其愿景是为研究人员和开发人员提供一种方便的方式分享他们的工作。每个模型都提供了详细资料,包括简介、开发者、类别、版本等,更重要的是提供了tfhub.dev URL的链接,甚至可以打开对应的Colab Notebook,试用该模型。图1中的 Universal Sentence Encoder模性就是这样的一个成功范例,它让开发社区可以尽快享用到最新的基础机器学习研究成果。

搜索和过滤

图2:查找使用西班牙语数据训练的文本嵌入模型

如果你有明确的需求,正在寻找合适的机器学习模型,你可以在TF Hub上搜索和过滤。上图展现了如何搜索文本嵌入模型,并按照语言(西班牙语)进行过滤,这样查找到的模型就限定于西班牙语数据集上训练的NNLM模型。

适用于产品团队的TensorFlow Hub

出于商业原因,有可能你所开发的机器学习模型并不会公开发布,TensorFlow开发团队也考虑到了这一需求。除了可以使用在https://tfhub.dev上发布的模型之外,TensorFlow Hub库还允许你将模型发布到私有存储并使用,这样模型可以为团队所共享,而又无需对外发布。

在代码上非常简,使用文件系统路径代替tfhub.dev URL引用模块即可:

代码语言:javascript
复制
m = hub.Module("/tmp/text-embedding")
embeddings = m(sentences)
如何开始

以目前最常见的应用-目标对象检测为例,我们可以使用Google和DeepMind团队最新发布的在Open Images v4数据集上训练的FasterRCNN模型。 我们只需要寥寥几行代码就可以加载模型,实现对象检测:

代码语言:javascript
复制
with tf.Graph().as_default():
  detector = hub.Module("https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1")
  image_string_placeholder = tf.placeholder(tf.string)
  decoded_image = tf.image.decode_jpeg(image_string_placeholder)
  # Module accepts as input tensors of shape [1, height, width, 3], i.e. batch
  # of size 1 and type tf.float32.
  decoded_image_float = tf.image.convert_image_dtype(
      image=decoded_image, dtype=tf.float32)
  module_input = tf.expand_dims(decoded_image_float, 0)
  result = detector(module_input, as_dict=True)
  init_ops = [tf.global_variables_initializer(), tf.tables_initializer()]

  session = tf.Session()
  session.run(init_ops)

  # Load the downloaded and resized image and feed into the graph.
  with tf.gfile.Open(downloaded_image_path, "rb") as binfile:
    image_string = binfile.read()

  result_out, image_out = session.run(
      [result, decoded_image],
      feed_dict={image_string_placeholder: image_string})
  print("Found %d objects." % len(result_out["detection_scores"]))

image_with_boxes = draw_boxes(
    np.array(image_out), result_out["detection_boxes"],
    result_out["detection_class_entities"], result_out["detection_scores"])

display_image(image_with_boxes)

下图是一张来自unsplash.com的图片,用于演示目标对象检测。

图3:用于对象检测的图片

将图片的真实地址替换上述代码中的image_string,可以得到如下的结果:

图4:模型推断出的边界框和类别

完整代码请参考:https://github.com/mogoweb/aiexamples

TF Hub上有趣的模型还有很多,比如:

  • 2017年iNaturalist Kaggle挑战赛的获奖者发表了一篇描述他们的方法的论文,并在TensorFlow Hub上发布了他们的模型,展示了迁移学习的优势。
  • 来自TensorFlow Hub团队的Jeremiah Harmsen发布了一个Kaggle示例,演示了如何利用TensorFlow Hub的预训练模块来解决Kaggle上的情绪分析挑战。

当然,还有更多的模型等待着你去发现。

参考
  1. A New TensorFlow Hub Web Experience

我的更多关于TensorFlow的文章:

  • 使用TensorFlow一步步进行目标检测(1)
  • 使用TensorFlow一步步进行目标检测(2)
  • 使用TensorFlow一步步进行目标检测(3)
  • 使用TensorFlow一步步进行目标检测(4)
  • 使用TensorFlow一步步进行目标检测(5)
  • TensorFlow.js简介
  • 一头栽进了tensorflow lite的巨坑里
  • Tensorflow SavedModel模型的保存与加载
  • 如何查看Tensorflow SavedModel格式模型的信息
  • 如何合并两个TensorFlow模型
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 探索和发现模块
  • 搜索和过滤
  • 适用于产品团队的TensorFlow Hub
  • 如何开始
  • 参考
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档