Keras深度神经网络模型分层分析【输入层、卷积层、池化层】

栏目: IT技术 · 发布时间: 4年前

内容简介:构建深度神经网络输入层,确定输入数据的类型和样式。input_data = Input(name='the_input', shape=(1600, 200, 1))1.shape:一个形状元组(整数),不包括批处理大小。 例如,shape =(32,)表示预期的输入将是32维向量的批次。

一.输入层

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填充策略

Keras深度神经网络模型分层分析【输入层、卷积层、池化层】


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大型网站技术架构

大型网站技术架构

李智慧 / 电子工业出版社 / 2013-9-1 / 59.00元

《大型网站技术架构:核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web 安全、系统发布、运维监控等在内的大型网站开发全景视图。 《大型网站技术架构:核心原理与案例分析》不仅适用于指导网站工程师、架构师进行网站技术架构设计,也可用于指导产品经......一起来看看 《大型网站技术架构》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换