Keras深度神经网络算法模型构建【输入层、卷积层、池化层】
一.输入层
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.种类
1.Conv1D
2.Conv2D
3.SeparableConv2D
4.Conv2DTranspose
5.Conv3D
6.Cropping1D
7.Cropping2D
8.Cropping3D
9.UpSampling1D
10.UpSampling2D
11.UpSampling3D
12.ZeroPadding1D
13.ZeroPadding2D
14.ZeroPadding3D
3.默认配置
1.时域卷积【一维卷积】
Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=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)
该层将输入信号与卷积核按照单一的空域【时域】方向进行卷积。如果use_bias=True,则还会加上一个偏置项,若activation不为None,则输出为经过激活函数的输出。
输入数据类型:形如(samples, steps, input_dim)的2D张量。
输出数据类型:形如(samples, new_steps, nb_filter)的3D张量。因为有向量填充的原因,steps的值会发生变化。
4.应用代码【以Conv2D为例】
Conv2D(64, kernel_size=(3, 3), strides=(1, 1), padding='same', input_shape=(28, 28, 1), activation='relu')
5.源码【以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
6.参数解析
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深度神经网络算法模型构建【输入层、卷积层、池化层】的更多相关文章
- tensorflow的卷积和池化层(二):记实践之cifar10
在tensorflow中的卷积和池化层(一)和各种卷积类型Convolution这两篇博客中,主要讲解了卷积神经网络的核心层,同时也结合当下流行的Caffe和tf框架做了介绍,本篇博客将接着tenso ...
- tensorflow中的卷积和池化层(一)
在官方tutorial的帮助下,我们已经使用了最简单的CNN用于Mnist的问题,而其实在这个过程中,主要的问题在于如何设置CNN网络,这和Caffe等框架的原理是一样的,但是tf的设置似乎更加简洁. ...
- [DeeplearningAI笔记]卷积神经网络1.9-1.11池化层/卷积神经网络示例/优点
4.1卷积神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.9池化层 优点 池化层可以缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性. 池化层操作 池化操作与卷积操作类似 ...
- 第十三节,使用带有全局平均池化层的CNN对CIFAR10数据集分类
这里使用的数据集仍然是CIFAR-10,由于之前写过一篇使用AlexNet对CIFAR数据集进行分类的文章,已经详细介绍了这个数据集,当时我们是直接把这些图片的数据文件下载下来,然后使用pickle进 ...
- 『TensorFlow』卷积层、池化层详解
一.前向计算和反向传播数学过程讲解
- CNN学习笔记:池化层
CNN学习笔记:池化层 池化 池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样.有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见 ...
- ubuntu之路——day17.3 简单的CNN和CNN的常用结构池化层
来看上图的简单CNN: 从39x39x3的原始图像 不填充且步长为1的情况下经过3x3的10个filter卷积后 得到了 37x37x10的数据 不填充且步长为2的情况下经过5x5的20个filter ...
- 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)
基于深度学习和迁移学习的识花实践(转) 深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...
- 【深度学习篇】--神经网络中的池化层和CNN架构模型
一.前述 本文讲述池化层和经典神经网络中的架构模型. 二.池化Pooling 1.目标 降采样subsample,shrink(浓缩),减少计算负荷,减少内存使用,参数数量减少(也可防止过拟合)减少输 ...
随机推荐
- G - KiKi's K-Number(树状数组求区间第k大)
For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. No ...
- PAT甲级——1009 Product of Polynomials
PATA1009 Product of Polynomials Output Specification: For each test case you should output the produ ...
- plague|commence|gymnasium|triumph|jump
N-COUNT 瘟疫:疫病A plague is a very infectious disease that spreads quickly and kills large numbers of p ...
- JVM 的内存布局
这是jdk7以后的版本 1. Heap(堆区) Heap OOM 障最主要的发源地, 它存储着几乎所有的实例对象, 堆由垃圾收集器自动回收, 堆区由各子线程共享使用.通常情况下 它占用的空间是所有内存 ...
- spring顾问包装通知
前边说到了顾问就是通知,没有实践,这里就实践一下,证明一下. 虽然可以说顾问就是通知,但是他们还是有的一定的区别的,通知是将目标类中所有的方法都进行的增强,而顾问却可以指定到特定的方法上,也就是说顾问 ...
- python3下应用pymysql(第三卷)(数据自增-用于爬虫)
在上卷中我说出两种方法进行数据去重自增,第一种就是在数据库的字段中设置唯一字段,二是在脚本语言中设置重复判断再添加(建议,二者同时使用,真正开发中就会用到) 话不多说先上代码 第一步: 确定那一字段的 ...
- shell-变量学习-01
1.变量 1.1 变量赋值 > variable_zhou="hello world!" #等号两边不能有空格 1.2 使用变量 > echo $variabl ...
- keepalive笔记之三:keepalived通知脚本进阶示例
下面的脚本可以接受选项,其中: -s, --service SERVICE,...:指定服务脚本名称,当状态切换时可自动启动.重启或关闭此服务: -a, --address VIP: 指定相关虚拟路由 ...
- signals function|KNN|SVM|average linkage|Complete linkage|single linkage
生物医疗大数据 存在系统误差使得估计量有偏,如下图红色和蓝色图形,存在随机误差使得估计量并不是同一个值,如图中除去期望之外的曲线值,为了控制随机抽样造成的误差,可以使用p-value决定是否服从假设检 ...
- Java程序、JSP以及JavaScript中如何判断某个字符串是否包含某个子串
1.JSP str:原始字符串, subStr:要查找的子字符串 <c:if test="${fn:contains(str,subStr)==true}"> < ...