专栏首页CreateAMindkeras中文doc之三

keras中文doc之三

前面介绍了keras文档一二 keras中文文档, keras中文-快速开始Sequential模型

keras文档内容丰富(视觉、语言、cnn、lstm、常用模型等),代码思路清晰,非常方便入门了解。

快速开始泛型模型

Keras泛型模型接口是用户定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型的途径

这部分的文档假设你已经对Sequential模型已经比较熟悉

让我们从简单一点的模型开始

第一个模型:全连接网络

Sequential当然是实现全连接网络的最好方式,但我们从简单的全连接网络开始,有助于我们学习这部分的内容。在开始前,有几个概念需要澄清:

  • 层对象接受张量为参数,返回一个张量。张量在数学上只是数据结构的扩充,一阶张量就是向量,二阶张量就是矩阵,三阶张量就是立方体。在这里张量只是广义的表达一种数据结构,例如一张彩色图像其实就是一个三阶张量,它由三个通道的像素值堆叠而成。而10000张彩色图构成的一个数据集合则是四阶张量。
  • 输入是张量,输出也是张量的一个框架就是一个模型
  • 这样的模型可以被像Keras的Sequential一样被训练

所有的模型都是可调用的,就像层一样

利用泛型模型的接口,我们可以很容易的重用已经训练好的模型:你可以把模型当作一个层一样,通过提供一个tensor来调用它。注意当你调用一个模型时,你不仅仅重用了它的结构,也重用了它的权重。

多输入和多输出模型

使用泛型模型的一个典型场景是搭建多输入、多输出的模型。

考虑这样一个模型。我们希望预测Twitter上一条新闻会被转发和点赞多少次。模型的主要输入是新闻本身,也就是一个词语的序列。但我们还可以拥有额外的输入,如新闻发布的日期等。这个模型的损失函数将由两部分组成,辅助的损失函数评估仅仅基于新闻本身做出预测的情况,主损失函数评估基于新闻和额外信息的预测的情况,即使来自主损失函数的梯度发生弥散,来自辅助损失函数的信息也能够训练Embeddding和LSTM层。在模型中早点使用主要的损失函数是对于深度网络的一个良好的正则方法。总而言之,该模型框图如下:

让我们用泛型模型来实现这个框图

主要的输入接收新闻本身,即一个整数的序列(每个整数编码了一个词)。这些整数位于1到10,000之间(即我们的字典有10,000个词)。这个序列有100个单词。

最后,我们定义整个2输入,2输出的模型:

共享层

另一个使用泛型模型的场合是使用共享层的时候。

考虑微博数据,我们希望建立模型来判别两条微博是否是来自同一个用户,这个需求同样可以用来判断一个用户的两条微博的相似性。

一种实现方式是,我们建立一个模型,它分别将两条微博的数据映射到两个特征向量上,然后将特征向量串联并加一个logistic回归层,输出它们来自同一个用户的概率。这种模型的训练数据是一对对的微博。

因为这个问题是对称的,所以处理第一条微博的模型当然也能重用于处理第二条微博。所以这里我们使用一个共享的LSTM层来进行映射。

首先,我们将微博的数据转为(140,256)的矩阵,即每条微博有140个字符,每个单词的特征由一个256维的词向量表示,向量的每个元素为1表示某个字符出现,为0表示不出现,这是一个one-hot编码。

【Tips】之所以是(140,256)是因为一条微博最多有140个字符(据说现在要取消这个限制了),而扩展的ASCII码表编码了常见的256个字符。原文中此处为Tweet,所以对外国人而言这是合理的。如果考虑中文字符,那一个单词的词向量就不止256了。【@Bigmoyan】

先暂停一下,看看共享层到底输出了什么,它的输出数据shape又是什么

层“节点”的概念

无论何时,当你在某个输入上调用层时,你就创建了一个新的张量(即该层的输出),同时你也在为这个层增加一个“(计算)节点”。这个节点将输入张量映射为输出张量。当你多次调用该层时,这个层就有了多个节点,其下标分别为0,1,2...

在上一版本的Keras中,你可以通过layer.get_ouput()方法来获得层的输出张量,或者通过layer.output_shape获得其输出张量的shape。这个版本的Keras你仍然可以这么做(除了layer.get_ouput()ouput()替换)。但如果一个层与多个输入相连,会出现什么情况呢?

如果层只与一个输入相连,那没有任何困惑的地方。.ouput()将会返回该层唯一的输出

够简单吧?

对于input_shapeoutput_shape也是一样,如果一个层只有一个节点,或所有的节点都有相同的输入或输出shape,那么input_shapeoutput_shape都是没有歧义的,并也只返回一个值。但是,例如你把一个相同的Convolution2D应用于一个大小为(3,32,32)的数据,然后又将其应用于一个(3,64,64)的数据,那么此时该层就具有了多个输入和输出的shape,你就需要显式的指定节点的下标,来表明你想取的是哪个了


更多的例子

代码示例依然是学习的最佳方式,这里是更多的例子

inception模型

inception的详细结构参见Google的这篇论文:Going Deeper with Convolutions

共享视觉模型

该模型在两个输入上重用了图像处理的模型,用来判别两个MNIST数字是否是相同的数字

视觉问答模型

在针对一幅图片使用自然语言进行提问时,该模型能够提供关于该图片的一个单词的答案

这个模型将自然语言的问题和图片分别映射为特征向量,将二者合并后训练一个logistic回归层,从一系列可能的回答中挑选一个。

视频问答模型

在做完图片问答模型后,我们可以快速将其转为视频问答的模型。在适当的训练下,你可以为模型提供一个短视频(如100帧)然后向模型提问一个关于该视频的问题,如“what sport is the boy playing?”->“football”

本文摘自keras-cn 文档 http://keras-cn.readthedocs.io/en/latest/getting_started/functional_API/

本文分享自微信公众号 - CreateAMind(createamind)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 十六 开发能够想象与推理的机器 -深度学习暑期班 ppt及视频

    发能够「想象」与「推理」的机器:深度生成模型的原理与应用(Building Machines that Imagine and Reason: Principl...

    用户1908973
  • 重磅 | 开发能够"想象"与"推理"的机器 -深度学习暑期班 ppt及视频

    用户1908973
  • 容量、过拟合和欠拟合

    机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好, 而不只是在训练集上效果好。在先前未观测到的输入上表现良好的能力被称为泛 化 (gener...

    用户1908973
  • 从基线模型开始:别担心,模型最开始都让人不忍直视

    大数据文摘
  • 机器学习模型可解释性的详尽介绍

    ? 模型可解释性方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于模型和特征的优...

    腾讯技术工程官方号
  • 5步将您的机器学习模型投入生产!

    构建出色的机器学习系统时,需要考虑很多因素。但是经常发生的情况是,我们作为数据科学家其实只担心项目的某些部分。

    用户6543014
  • 现代机器学习中的模型可解释性概述

    模型可解释性是当今机器学习中最重要的问题之一。通常某些“黑匣子”模型(例如深度神经网络)已部署到生产中,并且正在运行从工作场所安全摄像头到智能手机的所有关键系统...

    代码医生工作室
  • 数据科学

    版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxq0816/article/details...

    week
  • 从 MAX 网站中获取模型,一秒开始你的深度学习应用

    您是否想过对图像进行分类、识别图像中的人脸或位置、处理自然语言或文本,或者根据应用程序中的时间序列数据创建推荐? 通过深度学习(使用深度神经网络的机器学习),你...

    AI研习社
  • 概率图模型理论与应用

    故事尾音

扫码关注云+社区

领取腾讯云代金券