百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

什么是Keras?深度神经网络API详解

toyiye 2024-07-09 22:46 13 浏览 0 评论

作者:马丁·海勒

编译:码上打卡团队

虽然深度神经网络风靡一时,但主要框架的复杂性已成为新机器学习用户使用的障碍。已经提出了几种用于构建神经网络模型的改进和简化的高级API的建议,所有这些建议从整体看起来相似但在仔细检查时显示出差异。

Keras是领先的高级神经网络API之一。它是用Python编写的,支持多个后端神经网络计算引擎。

Keras和TensorFlow

鉴于TensorFlow项目已采用Keras作为即将推出的TensorFlow 2.0版本的高级API,Keras看起来是赢了。在本文中,我们将探讨Keras的原理和实现,着眼于理解为什么它是对低级深度学习API的改进。

即使在TensorFlow 1.12中,官方的TensorFlow入门教程也使用了TensorFlow中嵌入的高级Keras API:tf.keras。相比之下,TensorFlow Core API需要使用TensorFlow计算图,张量,操作和会话,当您刚刚开始使用TensorFlow时,其中一些很难理解。主要是在调试时,使用低级TensorFlow Core API有一些优点,但幸运的是,您可以根据需要混合使用高级和低级TensorFlow API。

Keras原则

Keras的创建是为了用户友好,模块化,易于扩展,并与Python一起使用。API是“为人类而不是机器设计的”,并且“遵循减少认知负荷的最佳实践”。

神经层,成本函数,优化器,初始化方案,激活函数和正则化方案都是独立模块,您可以将它们组合在一起以创建新模型。新模块很容易添加,作为新的类和函数。模型在Python代码中定义,而不是单独的模型配置文件。

为什么选择Keras?

使用Keras的最大原因源于其指导原则,主要是关于用户友好的原则。除了易于学习和简化模型构建之外,Keras还具有广泛采用的优势,支持广泛的生产部署选项,与至少五个后端引擎(TensorFlow,CNTK,Theano,MXNet和PlaidML)集成,并强烈支持多个GPU和分布式培训。此外,Keras还得到了谷歌,微软,亚马逊,苹果,Nvidia,优步等公司的支持。

Keras后端

Keras本身并不进行自己的低级操作,例如张量积和卷积; 它依赖于后端引擎。尽管Keras支持多个后端引擎,但其主要(和默认)后端是TensorFlow,其主要支持者是Google。Keras API打包在TensorFlow中的tf.keras中,如前所述,它将成为TensorFlow 2.0的主要TensorFlow API。

要更改后端,只需编辑$HOME/.keras/keras.json文件并指定其他后端名称,例如theano或CNTK。或者,您可以通过KERAS_BACKEND在shell中或使用os.environ["KERAS_BACKEND"]属性在Python代码中定义环境变量来覆盖已配置的后端。

Keras型号

该模型是Keras的核心数据结构。Keras中有两种主要的模型类型:Sequential模型,以及Model与功能API一起使用的类。

Keras顺序模型

该Sequential模型是层的线性堆栈,并且可以非常简单地描述层。以下是Keras文档中的一个示例,该文档用于model.add()在Sequential模型中定义两个密集层:

import keras

from keras.models import Sequential

from keras.layers import Dense

#注释:使用add方法在用Dense层创建Sequentials模型

model = Sequential()

#Dense 实现步骤:

# output = activation(dot(input, kernel) + bias)

#单位是层的输出空间的维数,等于隐藏单位的数量

# 激活和丢失函数可以由字符串或类指定

model.add(Dense(units=64, activation='relu', input_dim=100))

model.add(Dense(units=10, activation='softmax'))

#编译方法配置模型的学习过程

model.compile(loss='categorical_crossentropy',

optimizer='sgd',

metrics=['accuracy'])

#fit方法做批量训练

# x_train和y_train是Numpy数组,就像Scikit(一个学习API)

model.fit(x_train, y_train, epochs=5, batch_size=32)

#evaluate方法为训练的模型计算丢失函数和矩阵

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

#predict方法为输入的数据执行训练的模型,输出结果

classes = model.predict(x_test, batch_size=128)

上面代码中的注释值得一读。还有一点值得注意的是,与低级TensorFlow API相比,实际代码中有多少。每个层定义需要一行代码,编译(学习过程定义)需要一行代码,拟合(训练),评估(计算损失和度量),以及预测训练模型的输出每行需要一行代码。

Keras功能API

Keras Sequential模型很简单,但在模型拓扑中受到限制。所述Keras功能API是用于与共享层创建复杂的模型,如多输入/多输出模式,有向非循环图(DAG),和模型是有用的。

功能API使用与Sequential模型相同的层,但在将它们组合在一起时提供了更大的灵活性。在功能API中,首先定义图层,然后创建模型,编译它,然后拟合(训练)它。评估和预测与Sequential模型基本相同,因此在下面的示例代码中已省略。

from keras.layers import Input, Dense

from keras.models import Model

# 这边返回一个张量

inputs = Input(shape=(784,))

# 一个层实例在一个张量时是可调用的,然后返回一个张量

x = Dense(64, activation='relu')(inputs)

x = Dense(64, activation='relu')(x)

predictions = Dense(10, activation='softmax')(x)

# 这里创建一个包括输入层和三个Dense层

model = Model(inputs=inputs, outputs=predictions)

model.compile(optimizer='rmsprop',

loss='categorical_crossentropy',

metrics=['accuracy'])

model.fit(data, labels) # starts training

Keras层

在前面的例子中,我们只使用了Dense图层。Keras有多种预定义的图层类型,还支持编写自己的图层。

核心层包括Dense(点积加偏差),Activation(传递函数或神经元形状),Dropout(在每次训练更新时随机将输入单位的一部分设置为0以避免过度拟合),Lambda(将任意表达式包装为Layer对象),以及其他几个。卷积层(使用滤波器创建要素图)从1D到3D运行,包括最常见的变体,例如每个维度的裁剪和转置卷积层。2D卷积受到视觉皮层功能的启发,通常用于图像识别。

池(缩减)层从1D到3D运行并包括最常见的变体,例如最大和平均池。局部连接的层就像卷积层一样,除了权重是非共享的。循环层包括简单(完全连接的重复),门控,LSTM等; 这些对于语言处理以及其他应用程序非常有用。噪声层有助于避免过度拟合。

Keras数据集

Keras通过keras.datasets课程提供了七个常见的深度学习样本数据集。这包括cifar10和cifar100小彩色图像,IMDB电影评论,路透社新闻专题,MNIST手写数字,MNIST时尚图片和波士顿房价。

Keras应用程序和示例

Keras还提供十种着名的模型,称为Keras应用程序,预先针对ImageNet:Xception,VGG16,VGG19,ResNet50,InceptionV3,InceptionResNetV2,MobileNet,DenseNet,NASNet,MobileNetV2TK。您可以使用它们来预测图像的分类,从中提取特征,并在不同的类集上微调模型。

顺便说一句,微调现有模型是加速培训的好方法。例如,您可以根据需要添加图层,冻结基础图层以训练新图层,然后解冻一些基础图层以微调培训。您可以通过设置冻结图层layer.trainable = False。

该Keras实例库包含超过40个样本模型。它们涵盖了视觉模型,文本和序列以及生成模型。

部署Keras

Keras模型可以部署在广泛的平台上,可能比任何其他深度学习框架都要多。这包括iOS,通过CoreML(Apple支持); Android,通过TensorFlow Android运行时 ; 在浏览器中,通过Keras.js 和 WebDNN ; 在Google Cloud上,通过 TensorFlow-Serving ; 在Python webapp后端 ; 在JVM上,通过DL4J模型导入 ; 并在Raspberry Pi上。

要开始使用Keras,请阅读文档,查看代码存储库,安装TensorFlow(或其他后端引擎)和Keras,并试用Keras Sequential模型的入门教程。从那里你可以进入其他教程,并最终探索Keras示例。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码