一. 输入层
1. 用途
构建深度神经网络输入层, 确定输入数据的类型和样式.
2. 应用代码
input_data = Input(name='the_input', shape=(1600, 200, 1))
3. 源码
- def Input(shape=None, batch_shape=None,
- name=None, dtype=None, sparse=False,
- tensor=None):
- if not batch_shape and tensor is None:
- assert shape is not None, ('Please provide to Input either a `shape`'
- 'or a `batch_shape` argument. Note that'
- '`shape` does not include the batch'
- 'dimension.')
- if shape is not None and not batch_shape:
- batch_shape = (None,) + tuple(shape)
- if not dtype:
- dtype = K.floatx()
- input_layer = InputLayer(batch_input_shape=batch_shape,
- name=name, dtype=dtype,
- sparse=sparse,
- input_tensor=tensor)
- # Return tensor including _keras_shape and _keras_history.
- # Note that in this case train_output and test_output are the same pointer.
- outputs = input_layer.inbound_nodes[0].output_tensors
- if len(outputs) == 1:
- return outputs[0]
- else:
- return outputs
4. 参数解析
1.shape: 一个形状元组 (整数), 不包括批处理大小. 例如, shape =(32,) 表示预期的输入将是 32 维向量的批次.
2.batch_shape: 一个形状元组(整数), 包括批处理大小. 例如,"batch_shape =(10,32)" 表示预期的输入将是 10 个 32 维向量的批次.
"batch_shape =(None,32)" 表示任意数量的 32 维向量的批次.
3.name: 图层的可选名称字符串. 在模型中应该是唯一的(不要重复使用同一名称). 如果未提供, 它将自动生成.
4.dtype: 输入期望的数据类型, 为字符串, 例如:`float32`,`float64`,`int32` ...
5.sparse: 一个布尔值, 指定要创建的占位符是否稀疏.
6.tensor: 可选的现有张量以包装到 "Input" 层中. 如果设置, 则该图层将不会创建占位符张量.
二. 卷积层
1. 用途
该层创建一个卷积核, 该卷积核与该层输入进行卷积以产生输出张量. 如果 "use_bias" 为 True, 则创建偏差矢量并将其添加到输出中. 最后, 如果 "activation" 不是 None, 它也将应用于输出. 当将此层作为模型的第一层时, 要提供关键词参数 "input_shape"[整数元组, 不包括样本轴] , 例如: 当 data_format="channels_last" 时, 128*128RGB 三通道的图片的 input_shape=(128, 128, 3).
2. 应用代码
Conv2D(64, kernel_size=(3, 3), strides=(1, 1), padding='same', input_shape=(28, 28, 1), activation='relu')
3. 源码[以 Conv2D 为例]
- class Conv2D(_Conv):
- @interfaces.legacy_conv2d_support
- def __init__(self, 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,
- **kwargs):
- super(Conv2D, self).__init__(
- rank=2,
- filters=filters,
- kernel_size=kernel_size,
- strides=strides,
- padding=padding,
- data_format=data_format,
- dilation_rate=dilation_rate,
- activation=activation,
- use_bias=use_bias,
- kernel_initializer=kernel_initializer,
- bias_initializer=bias_initializer,
- kernel_regularizer=kernel_regularizer,
- bias_regularizer=bias_regularizer,
- activity_regularizer=activity_regularizer,
- kernel_constraint=kernel_constraint,
- bias_constraint=bias_constraint,
- **kwargs)
- self.input_spec = InputSpec(ndim=4)
- def get_config(self):
- config = super(Conv2D, self).get_config()
- config.pop('rank')
- return config
4. 参数解析
1.filters: 过滤器, 整数, 输出空间的维数[即卷积中过滤器输出的数量] .
2.kernel_size: 卷积核大小, 1 个整数或 2 个整数构成的元组或列表, 指定 2D 卷积窗口的宽度和高度. 可以只指定一个一个, 表示所有尺寸指定相同的值.
3.strides: 步长, 1 个整数或 2 个整数构成的元组或列表, 指定沿宽度和高度的卷积步幅长度. 可以只指定一个一个, 表示所有尺寸指定相同的值. 指定步长!=1 与指定扩张率[下面解释] !=1 不兼容.
4.padding: 填充, 包括 "valid" 和 "same".
5.data_format: 数据格式, 一个字符串,"channels_last"[默认] 或 "channels_first" 之一. 输入中尺寸的顺序."channels_last" 对应形状为 (批, 高度, 宽度, 通道) 的输入样式, 而 "channels_first" 对应形状为 (批, 通道, 高度, 宽度) 的输入样式. 它默认在 Keras 配置文件中的~/.keras/keras.JSON 中指定的 image_data_format 值. 如果未指定, 默认为 "channels_last".
6.dilation_rate: 一个整数或两个整数构成的元组或列表, 指定用于扩张卷积的扩张率. 可以是单个整数, 表示所有尺寸指定相同的值. 目前, 指定步长!=1 与指定扩张率!=1 不兼容.
7.activation: 激活函数, 若未指定, 则不使用任何激活函数[即线性激活: a(x) = x] .
8.use_bias: 布尔值, 图层是否使用偏差矢量.
9.kernel_initializer: 内核权重矩阵的初始化程序.
10.bias_initializer: 偏差向量的初始化程序.
11.kernel_regularizer: 正则化函数应用于内核权重矩阵.
12.bias_regularizer: 正则化函数应用于偏差向量.
13.activity_regularizer: 正则化函数应用于图层额输出.
14.kernel_constraint: 约束函数应用于内核矩阵.
15.bias_constaint: 约束函数应用于偏差向量.
三. 池化层
1. 用途
所谓池化, 存在两种池化方式, 分别是均值池化和最大池化. 在指定窗口大小时, 均值池化指取窗口数据的平均值来代替窗口数据的方式来实现数据缩放, 窗口越大, 缩放比例越大. 最大池化的原理与均值池化类似, 只是取窗口数据中的最大值来代替窗口数据, 因此, 相比较均值池化, 最大池化的结果更加突出, 也更加常用.
2. 种类
1. 最大池化
a.MaxPooling1D
b.MaxPooling2D 为空域信号施加最大池化, 应用于二维数据处理. 例如: 手写数字识别.
c.MaxPooling3D
2. 均值池化
- a.AveragePooling1D
- b.AveragePooling2D
- c.AveragePooling3D
3. 全局最大池化
- a.GlobalMaxPooling1D
- b.GlobalMaxPooling2D
4. 全局均值池化
- a.GlobalAveragePooling1D
- b.GlobalAveragePooling2D
3. 应用代码
- MaxPooling1D(pool_size=2, strides=None, padding='valid')
- MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
- MaxPooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)
- AveragePooling1D(pool_size=2, strides=None, padding='valid')
- AveragePooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)
- AveragePooling3D(pool_size=(2, 2, 2), strides=None, padding='valid', data_format=None)
- GlobalMaxPooling1D()
- GlobalMaxPooling2D(dim_ordering='defalut')
- GlobalAveragePooling1D()
- GlobalAveragePooling2D(dim_ordering='default')
4. 源码[以 MaxPooling2D 为例]
- class MaxPooling2D(_Pooling2D):
- @interfaces.legacy_pooling2d_support
- def __init__(self, pool_size=(2, 2), strides=None, padding='valid',
- data_format=None, **kwargs):
- super(MaxPooling2D, self).__init__(pool_size, strides, padding,
- data_format, **kwargs)
- def _pooling_function(self, inputs, pool_size, strides,
- padding, data_format):
- output = K.pool2d(inputs, pool_size, strides,
- padding, data_format,
- pool_mode='max')
- return output
5. 参数分析[以 MaxPooling2D 为例]
pool_size: 整数或长度为 2 的整数元组, 代表在两个方向 [竖直, 水平] 上的下采样因子, 如取(2, 2) 将使图片在两个维度上均变为原长的一半[4 个数据合成为 1 个] . 为整数表示各个维度值相同且为该数字.
strides: 步长, 整数或长度为 2 的整数元组或 None.
padding: 填充, 包括 "valid" 和 "same".
data_format: 数据格式, 一个字符串,"channels_last"[默认] 或 "channels_first" 之一. 输入中尺寸的顺序."channels_last" 对应形状为 (批, 高度, 宽度, 通道) 的输入样式, 而 "channels_first" 对应形状为 (批, 通道, 高度, 宽度) 的输入样式. 它默认在 Keras 配置文件中的~/.keras/keras.JSON 中指定的 image_data_format 值. 如果未指定, 默认为 "channels_last".
四. 备注
1.padding 填充策略
来源: https://www.cnblogs.com/yszd/p/12367687.html