深度学习 Keras 1.1 概述

Keras 是一个由 Python 编写的开源人工神经网络库,可以作为 Tensorflow、Microsoft-CNTK 和 Theano 的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化

Keras 使得创建深度学习模型变得快速而简单。

序列(sequential)API允许你为大多数问题逐层堆叠创建模型。虽然说对很多的应用来说, 这样的一个手法很简单也解决了很多深度学习网络结构的构建,但是它也有限制 - 它不允许你创建模型有共享层或有多个输入或输出的网络。

Keras 中的函数式(functional)API 是创建网络模型的另一种方式,它提供了更多的灵活性,包括创建更复杂的模型。

看完这个文章, 你将知道:

  • Sequential 和 Functional API 之间的区别。
  • 如何使用功能性(functional)API 定义简单的多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)模型。
  • 如何用共享层和多个输入输出来定义更复杂的模型。

Keras 序列模型 (Sequential Models)

Keras 提供了一个 Sequential 模型 API。
它是创建深度学习模型的一种相对简单的方法,我们透过创建 Kears 的 Sequential 类别实例(instance), 然后创建模型图层 并添加到其中。

Keras 函数式(functional)API构建模型

Keras函数式(functional)API为构建网络模型提供了更为灵活的方式。
它允许你定义多个输入或输出模型以及共享图层的模型。除此之外,它允许你定义动态(ad-hoc)的非周期性(acyclic)网络图。
模型是通过创建层的实例(layer instances)并将它们直接相互连接成对来定义的,然后定义一个模型(model)来指定那些层是要作为 这个模型的输入和输出。
让我们依次看看Keras功能(functional)API的三个独特特性:

定义输入

与Sequential模型不同,你必须创建独立的Input层物件的instance并定义输入数据张量的维度形状(tensor shape)。
输入层采用一个张量形状参数(tensor shape),它是一个tuple,用于宣吿输入张量的维度。

连接不同的网络层

模型中的神经层是成对连接的,就像是一个乐高积木一样有一面是凸一面是凹, 一个神经层的输出会接到另一个神经层的输入。
这是通过在定义每个新神经层时指定输入的来源来完成的。使用括号表示法,以便在创建图层之后,指定作为输入的神经层。

创建模型

在创建所有模型图层并将它们连接在一起之后,你必须定义一个模型(Model)物件的instance。
与Sequential API一样,这个模型是你可以用于总结(summarize),拟合(fit),评估(evaluate)和预测(predict)。
Keras提供了一个Model类别,你可以使用它从创建的图层创建模型的instance。它会要求你只指定整个模型的第一个输入层和最后一个的输出层。

标准网络模型

在开始使用函数式API时,最好先看一些标准的神经网络模型是如何定义的。
在本节中,我们将著眼于定义一个简单的多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)。
这些范例将为以后了解更复杂的网络构建提供基础。

多层感知器(Multilayer Perceptron)

卷积神经网络(CNN)

一个用于图像分类的卷积神经网络(convolutional neural network)

递归神经网络(RNN)

一个用于图像分类的长期短期记忆(LSTM)递归神经网络

共享层模型

多个神经层可以共享一个神经层的输出来当成输入。

共享输入层 (Shared Input Layer)

共享特征提取层 (Shared Feature Extraction Layer)

多种输入和输出模型

多输入模型

多输出模型

最佳实践

以上有一些小技巧可以帮助你充分利用函数式API定义自己的模型。
一致性的变量名称命名 对输入(可见)和输出神经层(输出)使用相同的变量名,甚至可以使用隐藏层(hidden1,hidden2)。这将有助于正确地将许多的神经层连接在一起。
检查图层摘要 始终打印模型摘要并查看图层输出,以确保模型如你所期望的那样连接在一起。
查看网络拓朴图像 总是尽可能地创建网络拓朴图像,并审查它,以确保一切按照你的意图连接在一起。
命名图层 你可以为图层指定名称,这些名称可以让你的模型图形摘要和网络拓朴图像更容易被解读。例如:Dense(1,name ='hidden1')
独立子模型 考虑分离出子模型的发展,并最终将子模型结合在一起。

总结 (Conclusion)

在这篇文章中有一些个人学习到的一些有趣的重点:
使用Keras也可以很灵活地来建构复杂的深度学习网络
每一种深度学习网络拓朴基本上都可以找的到一篇论文
了解每种深度学习网络拓朴架构的原理与应用的方向是强化内力的不二法门


转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:深度学习 Keras 1.1 概述

字数:1.4k

本文作者:夏来风

发布时间:2021-01-25, 22:27:01

原始链接:http://www.demo1024.com/blog/ai-ml-keras-1.1/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。