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

尽管深度神经网络风靡一时,但是对于刚接触机器学习的开发人员而言,主要框架的复杂性已成为其使用障碍。 对于构建神经网络模型的改进和简化的高级API,已经提出了一些建议,所有这些建议从远处看似相似,但在仔细检查时会显示出差异。

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

[ TensorFlow机器学习入门 。 • TensorFlow评论:最好的深度学习库变得更好 。 •查看最新版本的TensorFlow中的新增功能 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

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得到了Google,Microsoft,Amazon,Apple,Nvidia,Uber等公司的支持。

Keras后端

正确的Keras不会做自己的底层操作,例如张量积和卷积; 它依赖于后端引擎。 即使Keras支持多个后端引擎,其主要(默认)后端是TensorFlow,其主要支持者是Google。 tf.keras API以tf.keras打包在TensorFlow中, tf.keras ,它将成为TensorFlow 2.0的主要TensorFlow API。

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

Keras模型

模型是Keras的核心数据结构。 Keras中提供了两种主要的模型类型 : Sequential模型和与功能性API一起使用的Model类。

Keras顺序模型

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

import keras
from keras.models import Sequential
from keras.layers import Dense

#Create Sequential model with Dense layers, using the add method
model = Sequential()

#Dense implements the operation:
#        output = activation(dot(input, kernel) + bias)
#Units are the dimensionality of the output space for the layer,
#     which equals the number of hidden units
#Activation and loss functions may be specified by strings or classes
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))

#The compile method configures the model’s learning process
model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

#The fit method does the training in batches
# x_train and y_train are Numpy arrays --just like in the Scikit-Learn API.
model.fit(x_train, y_train, epochs=5, batch_size=32)

#The evaluate method calculates the losses and metrics
#     for the trained model
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

#The predict method applies the trained model to inputs
#     to generate outputs
classes = model.predict(x_test, batch_size=128)

上面代码中的注释值得阅读。 值得一提的是,与低级TensorFlow API相比,实际代码中几乎没有多余的东西。 每个层定义都需要一行代码,编译(学习过程定义)需要一行代码,而拟合(训练),评估(计算损失和度量)以及从受过训练的模型预测输出都需要一行代码。

Keras功能API

Keras顺序模型很简单,但模型拓扑有限。 Keras功能API可用于创建复杂的模型,例如多输入/多输出模型,有向无环图(DAG)和具有共享层的模型。

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

from keras.layers import Input, Dense
from keras.models import Model

# This returns a tensor
inputs = Input(shape=(784,))

# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)

# This creates a model that includes
# the Input layer and three Dense layers
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.datasets通过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模型可以部署在广泛的平台上,可能比其他任何深度学习框架都多。 其中包括通过CoreML (Apple支持)的iOS ; Android,通过TensorFlow Android运行时 ; 在浏览器中,通过Keras.js和WebDNN ; 通过TensorFlow-Serving在Google Cloud上 在Python webapp后端 ; 在JVM上, 通过DL4J模型导入 ; 并在Raspberry Pi上。

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

From: https://www.infoworld.com/article/3336192/what-is-keras-the-deep-neural-network-api-explained.html

你可能感兴趣的:(人工智能,后端,raspberry,pi)