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(浓缩),减少计算负荷,减少内存使用,参数数量减少(也可防止过拟合)减少输 ...
随机推荐
- Variable|quantitative variables|continuous variable|discrete variable|qualitative variables| observation|data set
2.1Variables and Data Variable:某物或某人的某一特征和其他个体不同. quantitative variables:定量变量either discrete (可以被数)o ...
- LTE-U/LAA
将LTE扩展至非授权频谱,得益于一个稳健的无线电通信线路,具有更好协调性的同步节点,以及以授权频谱为基点的载波聚合,LTE-U/LAA能提供比载波Wi-Fi更佳的网络性能和更强的用户体验,为移动运营商 ...
- java和javac命令
记录一下,今天无意中用到单独编译和执行某个java类,遇到各种Error: Could not find or load main class等问题,解决方案如下其中2和3选其一试试~ 1.javac ...
- xml_class来自 phpcms
<?php class xml{ var $parser; var $document; var $stack; var $data; var $last_opened_tag; var $is ...
- smtp 邮件传输协议 qq版实现
qq: telnet smtp.qq.com 587 (qq邮箱说明:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28& ...
- OpenCV 输入输出XML和YAML文件
#include <opencv2/core/core.hpp> #include <iostream> #include <string> using names ...
- php结合Redis实现高并发下的秒杀抢购功能
实现思路 准备两个队列A和B,假设A队列的名称为stock,用于存放商品总库存信息,B队列的名称为users,用于存放抢购成功后的用户信息.每当有用户进行抢购操作时,先从A队列弹出一个元素,如果该元素 ...
- js 实现排序算法 -- 快速排序(Quick Sort)
原文: 十大经典排序算法(动图演示) 快速排序 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整 ...
- java连接sqlserver数据简单操作
首先我们下载微软的JDBC驱动包 https://www.microsoft.com/en-us/download/details.aspx?id=11774 下载好后我们打开如下图 点击Unzip ...
- console.log添加样式及图片
console.log在控制台打出css样式的文字及图片 谷歌开发者中心上面关于谷歌浏览器控制台console.log()的文档 Format Specifier %s Formats the val ...