Keras文档目录
Keras官方文档链接:
https://keras.io/ 英文
https://keras.io/zh/ 中文
中英文的文档结构都不太友好,我按照初学使用Keras过程中,接触的类进行了排版。
首先查看使用的数据集,了解数据结构,其次堆叠深度网络的隐藏层,在网络训练compile的语句中,会使用Loss和Optimizer,以及Metric等参数。
其他的部分是调整模型时需要用的,可以在使用的时候参考官方文档。
常用数据集 Datasets
- CIFAR10小图像分类数据集
- CIFAR100小图像分类数据集
- IMDB电影评论情感分类数据集
- 路透社新闻主题分类
- MNIST手写字符数据集
- Fashion-MNIST时尚物品数据集
- Boston房价回归数据集
数据调用方法(直接存储在user\.keras\datasets中)
from keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data()
网络层 Layers
所有Keras层都有很多共同的函数:
layer.get_weights(): 以含有Numpy矩阵的列表形式返回层的权重。
layer.set_weights(weights): 从含有Numpy矩阵的列表中设置层的权重(与get_weights的输出形状相同)。
layer.get_config(): 返回包含层配置的字典。此图层可以通过以下方式重置:
layer = Dense(32)
config = layer.get_config()
reconstructed_layer = Dense.from_config(config)
或:
from keras import layers
config = layer.get_config()
layer = layers.deserialize({'class_name': layer.__class__.__name__,
'config': config})
如果一个层具有单个节点 (i.e. 如果它不是共享层), 你可以得到它的输入张量,输出张量,输入尺寸和输出尺寸:
layer.input
layer.output
layer.input_shape
layer.output_shape
如果层有多个节点 (参见: 层节点和共享层的概念), 您可以使用以下函数:
layer.get_input_at(node_index)
layer.get_output_at(node_index)
layer.get_input_shape_at(node_index)
layer.get_output_shape_at(node_index)
核心网络层 Core
- Dense
- Activation
- Dropout
- Flatten
- Input
- Reshape
- Permute
- repeatVector
- Lambda
- activityRegularization
- Masking
- SpatialDropout1D
- SpatialDropout2D
- SpatialDropout3D
卷积层 Convolutional
- Conv1D
- Conv2D
- SeparableConv1D
- SeparableConv2D
- Conv2DTranspose
- Conv3D
- Cropping1D
- Cropping2D
- Cropping3D
- UpSampling1D
- UpSampling2D
- UpSampling3D
- ZeroPadding1D
- ZeroPadding2D
- ZeroPadding3D
池化层 Pooling
- MaxPooling1D
- MaxPooling2D
- MaxPooling3D
- AveragePooling1D
- AveragePooling2D
- AveragePooling3D
- GlobalMaxPooling1D
- GlobalMaxPooling2D
- GlobalMaxPooling3D
- GlobalAveragePooling1D
- GlobalAveragePooling1D
- GlobalAveragePooling1D
局部连接层 Locally-connected
注:权值不共享的卷积层Conv
- LocallyConnected1D
- LocallyConnected2D
循环层 Recurrent
- RNN
- SimpleRNN
- GRU
- LSTM
- ConvLSTM2D
- SimpleRNNCell
- GRUCell
- LSTMCell
- StackedRNNCell
- CuDNNGRU
- CuDNNLSTM
嵌入层 Embedding
将正整数(索引值)转换为固定尺寸的稠密向量。 例如: [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]
该层只能用作模型中的第一层。
(基本上只在RNN网络中使用)
融合层 Merge
- Add
- Subtract
- Multiply
- Average
- Maximum
- Concatenate
- Dot
- add
- subtract
- multiply
- average
- maximum
- concatenate
- dot
高级**层 Advanced Activations
- LeakyReLU
- PReLU
- ELU
- ThresholdedReLU
- Softmax
- ReLU
标准化层 Normalization
批量标准化层 (Ioffe and Szegedy, 2014)。
在每一个批次的数据中标准化前一层的**项, 即,应用一个维持**项平均值接近 0,标准差接近 1 的转换。
噪声层 Noise
该层可以缓解过拟合
- GaussianNoise
- GaussianDroppout
- AlphaDroppout
损失函数 Losses
损失函数(或称目标函数、优化评分函数)是编译模型时所需的两个参数之一:
model.compile(loss='mean_squared_error', optimizer='sgd')
from keras import losses
model.compile(loss=losses.mean_squared_error, optimizer='sgd')
你可以传递一个现有的损失函数名,或者一个TensorFlow/Theano符号函数。 该符号函数为每个数据点返回一个标量,有以下两个参数:
y_true: 真实标签. TensorFlow/Theano张量。
y_pred: 预测值. TensorFlow/Theano张量,其shape与y_true相同。
实际的优化目标是所有数据点的输出数组的平均值。
有关这些函数的几个例子,请查看losses source。
损失函数类型:
- mean_squared_error
- mean_absolute_error
- mean_absolute_percentage_error
- mean_squared_logarithmic_error
- squared_hinge
- hinge
- categorical_hinge
- logcosh
- categorical_crossentropy
- sparse_categorical_crossentropy
- binary_crossentropy
- kullback_leibler_divergence
- poisson
- cosine_proximity
优化器 Optimizers
化器(optimizer)是编译Keras模型的所需的两个参数之一:
from keras import optimizers
model = Sequential()
model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,)))
model.add(Activation('tanh'))
model.add(Activation('softmax'))
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
你可以先实例化一个优化器对象,然后将它传入model.compile(),像上述示例中一样, 或者你可以通过名称来调用优化器。在后一种情况下,将使用优化器的默认参数。
model.compile(loss='mean_squared_error', optimizer='sgd')
- SGD
- RMSprop
- Adagrad
- Adadelta
- Adam
- Adamax
- Nadam
- TFOptimizer
评估标准 Metrics
评价函数用于评估当前训练模型的性能。当模型编译后(compile),评价函数应该作为 metrics 的参数来输入。
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['mae', 'acc'])
from keras import metrics
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=[metrics.mae, metrics.categorical_accuracy])
可使用的评价函数
- Binary_accuracy
- Categorical_accuracy
- Sparse_categorical_accuracy
- Top_k_categorical_accuracy
- Sparse_top_k_categorical_accuracy
- 自定义的评价函数
**函数 Activations
**函数可以通过设置单独的**层实现,也可以在构造层对象时通过传递activation参数实现
from keras.layers import Activation, Dense
model.add(Dense(64))
model.add(Activation('tanh'))
#等价于
model.add(Dense(64, activation='tanh'))
#你也可以通过传递一个逐元素运算的Theano/TensorFlow/CNTK函数来作为**函数:
from keras import backend as K
model.add(Dense(64, activation=K.tanh))
model.add(Activation(K.tanh))
**函数的种类:
- Softmax
- Elu
- Selu
- Softplus
- Softsign
- Relu
- Tanh
- Sigmoid
- Hard_sigmoid
- Linear
- 高级**函数
初始化 Initializers
初始化器的用法
初始化定义了设置 Keras 各层权重随机初始值的方法。
用来将初始化器传入 Keras 层的参数名取决于具体的层。通常关键字为 kernel_initializer 和 bias_initializer:
model.add(Dense(64, kernel_initializer='random_uniform', bias_initializer='zeros'))
可用的初始化器:
- Initializer 基类
- Zeros
- Ones
- Constant
- RandomNormal
- RandomUniform
- TruncatedNormal
- VarianceScaling
- Orthogonal
- Identify
- Lecun_uniform
- Glorot_normal
- Glorot_uniform
- he_normal
- Lecun_normal
- he_uniform
- 自定义的初始化器
正则化 Regularizers
正则化器允许在优化过程中对层的参数或层的**情况进行惩罚。 网络优化的损失函数也包括这些惩罚项。
惩罚是以层为对象进行的。具体的 API 因层而异,但 Dense,Conv1D,Conv2D 和 Conv3D 这些层具有统一的 API。
正则化器开放 3 个关键字参数:
-
kernel_regularizer: keras.regularizers.Regularizer 的实例
-
bias_regularizer: keras.regularizers.Regularizer 的实例
-
activity_regularizer: keras.regularizers.Regularizer 的实例
from keras import regularizers
model.add(Dense(64, input_dim=64, kernel_regularizer=regularizers.l2(0.01), activity_regularizer=regularizers.l1(0.01)))
有以下3种正则化器
- keras.regularizers.l1(0.)
- keras.regularizers.l2(0.)
- keras.regularizers.l1_l2(l1=0.01, l2=0.01)
也可以开发新的正则化器
约束 Constraints
constraints 模块的函数允许在优化期间对网络参数设置约束(例如非负性)。
约束是以层为对象进行的。具体的 API 因层而异,但 Dense,Conv1D,Conv2D 和 Conv3D 这些层具有统一的 API。
约束层开放 2 个关键字参数:
kernel_constraint 用于主权重矩阵。
bias_constraint 用于偏置。
from keras.constraints import max_norm
model.add(Dense(64, kernel_constraint=max_norm(2.)))
可用的约束
- max_norm(max_value=2, axis=0): 最大范数约束
- non_neg(): 非负性约束
- unit_norm(axis=0): 单位范数约束
- min_max_norm(min_value=0.0, max_value=1.0, rate=1.0, axis=0): 最小/最大范数约束
可视化 Visualization
keras.utils.vis_utils模块提供了一些绘制Keras模型的实用功能(使用graphviz)。需要安装pydot和graphviz(需要添加bin的path环境变量,这样pydot才能用命令行调用该命令)
以下实例,将绘制一张模型图,并保存为文件:
from keras.utils import plot_model
plot_model(model, to_file='model.png')
plot_model有两个可选参数:
-
show_shapes (默认为False) 控制是否在图中输出各层的尺寸。
-
show_layer_names (默认为True) 控制是否在图中显示每一层的名字。
此外,你也可以直接取得pydot.Graph对象并自己渲染它。 ipython notebook中的可视化实例如下:from IPython.display import SVGfrom keras.utils.vis_utils import model_to_dot
SVG(model_to_dot(model).create(prog=‘dot’, format=‘svg’))
回调函数 Callbacks
回调函数是一个函数的合集,会在训练的阶段中所使用。你可以使用回调函数来查看训练模型的内在状态和统计。你可以传递一个列表的回调函数(作为 callbacks 关键字参数)到 Sequential 或 Model 类型的 .fit() 方法。在训练时,相应的回调函数的方法就会被在各自的阶段被调用。
后端 Backend
Keras 是一个模型级库,为开发深度学习模型提供了高层次的构建模块。它不处理诸如张量乘积和卷积等低级操作。相反,它依赖于一个专门的、优化的张量操作库来完成这个操作,它可以作为 Keras 的「后端引擎」。相比单独地选择一个张量库,而将 Keras 的实现与该库相关联,Keras 以模块方式处理这个问题,并且可以将几个不同的后端引擎无缝嵌入到 Keras 中。
目前,Keras 有三个后端实现可用: TensorFlow 后端,Theano 后端,CNTK 后端。
数据预处理Preprocessing
序列预处理 Sequence
- TimeseriesGenerator
- pad_sequences
- skipgrams
- make_sampling_table
文本预处理 Text
- Tokenizer
- hashing_trick
- one_hot
- text_to_word_sequence
图像预处理 Image
- ImageDataGenerator类
- ImageDataGenerator类方法
应用 Applications
Keras 的应用模块(keras.applications)提供了带有预训练权值的深度学习模型,这些模型可以用来进行预测、特征提取和微调(fine-tuning)。
当你初始化一个预训练模型时,会自动下载权值到 user/.keras/models/ 目录下。
模型 大小 Top-1 准确率 Top-5 准确率 参数数量 深度
Xception 88 MB 0.790 0.945 22,910,480 126
VGG16 528 MB 0.715 0.901 138,357,544 23
VGG19 549 MB 0.727 0.910 143,667,240 26
ResNet50 99 MB 0.759 0.929 25,636,712 168
InceptionV3 92 MB 0.788 0.944 23,851,784 159
InceptionResNetV2 215 MB 0.804 0.953 55,873,736 572
MobileNet 17 MB 0.665 0.871 4,253,864 88
DenseNet121 33 MB 0.745 0.918 8,062,504 121
DenseNet169 57 MB 0.759 0.928 14,307,880 169
DenseNet201 80 MB 0.770 0.933 20,242,984 201
大小是模型下载后的大小,Top-1 准确率和 Top-5 准确率都是在 ImageNet 验证集上的结果。
例子:
from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np
model = ResNet50(weights='imagenet')
img_path = 'elephant.jpg' #可以替换成自己的图片,路径可以绝对路径也可以相对路径
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img) x = np.expand_dims(x, axis=0)
x = preprocess_input(x) preds = model.predict(x)
# decode the results into a list of tuples (class, description, probability) # (one such list for each sample in the batch)
print('Predicted:', decode_predictions(preds, top=3)[0])
# Predicted: [(u'n02504013', u'Indian_elephant', 0.82658225), (u'n01871265', u'tusker', 0.1122357), (u'n02504458', u'African_elephant', 0.061040461)]