keras 深度网络
虽然深度神经网络风靡一时,但主要框架的复杂性已成为机器学习新手使用它们的障碍。 对于构建神经网络模型的改进和简化的高级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得到了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
文件并指定其他后端名称,例如theano
或CNTK
。 另外,您可以使用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 Applications,它们针对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示例 。
翻译自: https://www.infoworld.com/article/3336192/what-is-keras-the-deep-neural-network-api-explained.html
keras 深度网络