今天复习了一下keras文档,把一些知识点整理一下,备忘。
1Keras是什么?
Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。(CNTK是后来增加的,微软的深度学习工具包,据说速度挺快,以后可以试试)
2 Keras的特点:
简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
支持CNN和RNN,或二者的结合
3 Keras的核心数据结构是“模型”,模型是一种组织网络层的方式。Keras中主要的模型是Sequential模型,Sequential是一系列网络层按顺序构成的栈。
4 Tensor张量:可以看作是向量、矩阵的自然推广,我们用张量来表示广泛的数据类型。
5 Theano,“channels_first”,即通道维靠前,例如:(100,3,16,32)
TensorFlow,“channels_last”,即通道维靠后,例如:(100,16,32,3)
6batch,深度学习的优化算法,说白了就是梯度下降,每batch个样本数据更新一次参数。
7keras如果使用TensorFlow作为后端,当机器上有可用的GPU时,代码会自动调用GPU进行并行计算。如果使用Theano作为后端,需要设置一下(2种方法)。
8“冻结”一个层指的是该层将不参加网络训练,即该层的权重永不会更新。在进行fine-tune时我们经常会需要这项操作。在使用固定的embedding层处理文本输入时,也需要这个技术。可以通过向层的构造函数传递trainable
参数来指定一个层是不是可训练的。
Sequential
的第一层需要接受一个关于输入数据shape的参数,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数.
10 函数式模型称作Functional,但它的类名是Model。Keras函数式模型接口是用户定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型的途径。
11 常用层:对应于core模块,core内部定义了一系列常用的网络层,包括全连接、激活层等。
keras.layers.core.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
input:形如(nb_samples, ..., input_shape[1])的nD张量,最常见的情况为(nb_samples, input_dim)的2D张量
output:形如(nb_samples, ..., units)的nD张量,最常见的情况为(nb_samples, output_dim)的2D张量
Activation层,对一个层的输出施加激活函数
keras.layers.core.Activation(activation)
keras.layers.core.Dropout(rate, noise_shape=None, seed=None)
keras.layers.core.Flatten()
keras.layers.core.Reshape(target_shape)
keras.layers.convolutional.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
input: ‘channels_last’模式下,输入形如(samples,rows,cols,channels)的4D张量
output: ‘channels_last’模式下,为形如(samples,new_rows, new_cols,nb_filter)的4D张量
keras.layers.recurrent.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)
input:形如(samples,timesteps,input_dim)的3D张量
output:如果return_sequences=True:返回形如(samples,timesteps,output_dim)的3D张量,否则,返回形如(samples,output_dim)的2D张量
12目标函数或损失函数:常用categorical_crossentropy:亦称作多类的对数损失,注意使用该目标函数时,标签应该为多类模式,即one-hot编码的向量,而不是单个数值. 可以使用工具中的
to_categorical
函数完成该转换。
13优化器optimizer:可以在调用
model.compile()
之前初始化一个优化器对象,然后传入该函数(如上所示),也可以在调用model.compile()
时传递一个预定义优化器名。在后者情形下,优化器的参数将使用默认值。
常用的几个:
SDG随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06)
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
14激活函数:
softmax:对输入数据的最后一维进行softmax,输入数据应形如(nb_samples, nb_timesteps, nb_dims)
或(nb_samples,nb_dims)
elu
softplus
softsign
relu(最常用),在其基础上还有高级激活函数,LeakYReLU,PReLU
tanh
sigmoid
hard_sigmoid
linear
16回调函数Callbacks:一组在训练的特定阶段被调用的函数集,你可以使用回调函数来观察训练过程中网络内部的状态和统计信息。通过传递回调函数列表到模型的.fit()
中,即可在给定的训练阶段调用该函数集中的函数。
filepath
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)
keras.callbacks.EarlyStopping(monitor='val_loss', patience=0, verbose=0, mode='auto')
keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0)
keras.utils.vis_utils
模块提供了画出Keras模型的函数(利用graphviz),该函数将画出模型结构图,并保存成图片。