keras深度学习模型深度学习

Keras调研

2019-01-02  本文已影响0人  iamlightsmile

Keras调研

关于Keras

Keras基于Python编写,是一个高层神经网络API,基于TensorFlow、Theano及CNTK后端。Keras为支持快速实验而生,能把idea迅速转换为结果。

Keras的特性

Keras的设计原则

Keras框架组织

Keras框架组织

在Keras中,主要被组织为modelslayerspreprocessinglossesoptimizersmetricsinitializersregularizersconstraintscallbacksdatasetsapplicationsutilsbackend等。

其中:

除此之外,keras的wrappers包装器提供了如Scikit-Learn的接口,可以将Sequential模型传入Scikit-Learn包装器中的分类器或回归器接口完成训练;

序贯模型与函数式模型

在Keras中,模型包括Sequential序贯模型和Model函数式模型,其中函数式模型的应用更加广泛,序贯模型是函数式模型的一种特殊情况。

序贯模型的API在大多数情况下非常适合开发深度学习模型,但也有一些限制。它适合处理一般的单输入、单输出、层次堆叠鲜明的神经网络模型,而并不适合处理多对一、一对多、以及在网络中共享输入层、共享特征提取层等相对复杂、灵活的情况。

模型保存

keras的model模块提供了save(filepath)方法用于保存Keras模型和权重到HDF5文件中

文件包含的内容包括:模型的结构,以便重构改模型、模型的权重训练配置(损失函数,优化器等)、优化器的状态,以便于从上次训练中断的地方开始 model模块提供了:

简单案例说明

Sequential模型

# For a single-input model with 2 classes (binary classification):

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# Generate dummy data
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)

上例是一个简单的二分类模型,构建的是一个Sequential序贯模型:

Model模型

# Shared Input Layer
from keras.utils import plot_model
from keras.models import Model
from keras.layers import Input
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPooling2D
from keras.layers.merge import concatenate
# input layer
visible = Input(shape=(64,64,1))
# first feature extractor
conv1 = Conv2D(32, kernel_size=4, activation='relu')(visible)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
flat1 = Flatten()(pool1)
# second feature extractor
conv2 = Conv2D(16, kernel_size=8, activation='relu')(visible)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
flat2 = Flatten()(pool2)
# merge feature extractors
merge = concatenate([flat1, flat2])
# interpretation layer
hidden1 = Dense(10, activation='relu')(merge)
# prediction output
output = Dense(1, activation='sigmoid')(hidden1)
model = Model(inputs=visible, outputs=output)

该神经网络的模型如下图:

神经网络模型架构

这里使用了Model函数式模型构建的神经网络模型,输入的维度为64641有两个CNN特征提取子模型共享该输入,第一个内核大小为4,第二个内核大小为8,在分别卷积池化后,特征会被平坦化为向量并连接成一个长向量,并连接到完全连接的层,最终使用sigmoid激活函数完成分类问题。

调用GPU的方式

如果采用TensorFlow作为后端,当机器上有可用的GPU时,代码会自动调用GPU进行并行计算。如果采用Theano作为后端,可通过使用Theano标记、设置.theano文件、代码开头手动设置等三种方式来指定。

和其他框架对比

总结

Keras是一个非常容易上手的深度学习框架,使用起来比较简单,创建神经网络模型就像搭积木一样,可以快速搭建模型和验证想法,同时不用去关心CPU和GPU切换的问题,CNN和RNN及其变体都支持,十分适合新手和需要快速验证更迭模型的人群使用;

同时由于Keras是高层的API,在使用时一般不会直接涉及神经网络与深度学习一些基础性的知识和原理,屏蔽了许多细节,使用起来就像黑盒子,不如TensorFlow等需要自己去设计和配置较低层的东西,从而更加理解和掌握相关原理;

性能方面,Keras非常适合在学术界或研究领域,但可能并不太适用于在性能要求很高、要求实时计算的领域,如移动端或嵌入式设备等。

参考

https://keras-cn.readthedocs.io/en/latest/

https://keras-cn.readthedocs.io/en/latest/for_beginners/FAQ/

https://blog.csdn.net/ice_actor/article/details/78290830

https://www.jiqizhixin.com/articles/keras-or-pytorch

上一篇 下一篇

猜你喜欢

热点阅读