keras中 channels_last 和 channels_first 用来设定数据的维度顺序(image_data_format)。
对2D数据来说,"channels_last"假定维度顺序为 (rows,cols,channels), 而"channels_first"假定维度顺序为(channels, rows, cols)。
对3D数据而言,"channels_last"假定(conv_dim1, conv_dim2, conv_dim3, channels),"channels_first"则是(channels, conv_dim1, conv_dim2, conv_dim3)。
可通过 keras.backend.image_data_format() 来获取当前的维度顺序,一般默认顺序是 channels_last。
keras中 preprocess_input() 函数完成数据预处理的工作,数据预处理能够提高算法的运行效果。常用的预处理包括数据归一化和白化(whitening)。
深度学习中数据归一化的常用方法:
1. 简单缩放Simple Rescaling)
简单缩放方法是通过对数据各个维度上的值进行重新调节,使得数据整体上分布在[0,1]或[-1,1]区间。
2. 逐样本均值消减(Per-example mean subtraction)
逐样本均值消减,也称为移除直流分量(remove DC),具体操作是把每个样本都减去所有样本的统计平均值,这种归一化方法在图像领域常见。
3. 特征标准化(Feature Standardization)
特征标准化指的是(独立地)使得数据的每一个维度具有零均值和单位方差,具体操作是首先计算每一个维度上数据的均值(使用全体数据计算),之后在每一个维度上都减去该均值。下一步便是在数据的每一维度上除以该维度上数据的标准差。
白化,又称漂白或者球化;是对原始数据执行变换,使得转换后的数据的协方差矩阵为单位阵。
图像中相邻像素之间具有很强的相关性,因此输入是冗余的。白化的目的就是降低输入的冗余性。
经白化处理后的数据集满足两个条件:一是特征相关性较低;二是特征具有相同的方差。
白化算法的实现过程:第一步操作是PCA,求出新特征空间中的新坐标,第二步是对新的坐标进行方差归一化操作。
keras中preprocess_input()函数的作用是对样本执行 逐样本均值消减 的归一化,即在每个维度上减去样本的均值,对于维度顺序是channels_last的数据,keras中每个维度上的操作如下:
x[..., 0] -= 103.939
x[..., 1] -= 116.779
x[..., 2] -= 123.68
keras在core模块中定义了一系列常用的网络层,包括全连接,激活层等。Dense层是全连接层。
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)
参数:
常用的SGD优化器:
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
随机梯度下降法,支持动量参数,支持学习衰减率,支持Nesterov动量。
参数
Model是keras定义的一个类,用来生成模型,又被称为函数式(Funcitional)模型,Keras函数式模型接口是用户定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型的途径,是最广泛的一类模型。
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()函数。
compile(self, optimizer, loss, metrics=None, loss_weights=None,
sample_weight_mode=None, weighted_metrics=None,
target_tensors=None, **kwargs)