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(浓缩),减少计算负荷,减少内存使用,参数数量减少(也可防止过拟合)减少输 ...
随机推荐
- Web Service概述 及 应用案例
Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用 ...
- springboot+mybatis登录注册
接上上一篇博客的继续往下做,上一篇已经实现了mybatis自动生成代码,和连接数据库测试部分 本篇我们添加一些功能,实现登录注册,时间原因,前端实现的很粗糙,以后有时间再改吧 首先看一下数据库的构成, ...
- 允许外部访问Windows本机的指定端口
背景:目前公司有一台公网Windows服务器,有公网IP和内网IP,防火墙已开启 需求:9999端口需要对外开放 方案:在防火墙的入站规则里添加一条规则,使外部能够访问9999端口 问题:添加好规则后 ...
- The Tower(ccpc吉林)
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=867 #include<iostream> ...
- 利用Python进行图片发送与接收的两种方法---包含客户端和服务器端代码
第一种方法 opencv.requests.flask 此方法比较耗费时间 600毫秒左右 客户端代码 #coding:utf-8 import cv2 import json import requ ...
- Java枚举的作用和用法
从没有枚举的时代说起 在枚举出现之前,如果想要表示一组特定的离散值,往往使用一些常量.例如: [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 ...
- 题解:线性规划与网络流24题 T2 太空飞行计划问题
太空飞行计划问题 问题描述 W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要 ...
- Mybatis 入门之resultMap与resultType讲解实例
resultMap:适合使用返回值是自定义实体类的情况 resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型 resultMap : type:映射实体类的数据类型 id: ...
- Widgets学习
ListView ListView RecyclerView RecyclerView ExpandableListView 关闭箭头 elvMsg.setGroupIndicator(null); ...
- 用了python多进程,我跑程序花费的时间缩短了4倍
应用场景:本人需要对200万条网页html格式数据进行清洗,提取文字后将分词结果写入数据库,之前做了一次,大概花费了80多个小时才跑完.机器配置是4核,内存8G:开完会领导让再改点东西重新跑一遍,然后 ...