交流群:462197261站长百科站长论坛热门标签收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
点击这里给我发消息
  • 当前位置:
  • keras中的卷积层&池化层的用法

    北冥有鱼 教程大全 2020-05-22 ,,

    卷积层

    创建卷积层

    首先导入keras中的模块

    from keras.layers import Conv2D

    卷积层的格式及参数:

    Conv2D(filters, kernel_size, strides, padding, activation='relu', input_shape)

    filters: 过滤器数量

    kernel_size:指定卷积窗口的高和宽的数字

    strides: 卷积stride,如果不指定任何值,则strides设为1

    padding: 选项包括'valid'和'same',默认值为'valid'

    activation: 通常为'relu',如果不指定任何值,则不应用任何激活函数,通常应该向网络中每个卷积层添加一个Relu激活函数

    如果卷积层出现在输入层之后,必须提供另一个input_shape参数:

    input_shape: 指定输入的高度、宽度和深度的元组;如果卷积层不是网络的第一个层级,则不应该包含input_shape参数。

    示例1:

    假设我要构建一个 CNN,输入层接受的是 200 x 200 像素(对应于高 200、宽 200、深 1 的三维数组)的灰度图片。然后,假设我希望下一层级是卷积层,具有 16 个过滤器,每个宽和高分别为 2。在进行卷积操作时,我希望过滤器每次跳转 2 个像素。并且,我不希望过滤器超出图片界限之外;也就是说,我不想用 0 填充图片。

    要构建该卷积层,我将使用下面的代码

    Conv2D(filters=16, kernel_size=2, strides=2, activation='relu', input_shape=(200, 200, 1))

    示例 2

    假设我希望 CNN 的下一层级是卷积层,并将示例 1 中构建的层级作为输入。假设新层级是 32 个过滤器,每个的宽和高都是 3。在进行卷积操作时,我希望过滤器每次移动 1 个像素。我希望卷积层查看上一层级的所有区域,因此不介意过滤器在进行卷积操作时是否超过上一层级的边缘。

    然后,要构建此层级,我将使用以下代码:

    Conv2D(filters=32, kernel_size=3, padding='same', activation='relu')

    卷积层中的参数数量

    卷积层中的参数数量取决于filters, kernel_size, input_shape的值

    K: 卷积层中的过滤器数量, K=filters

    F:卷积过滤器的高度和宽度, F = kernal_size

    D_in: 上一层级的深度, D_in是input_shape元组中的最后一个值

    卷积层中的参数数量计算公式为:K * F * F * D_in + K

    卷积层的形状

    卷积层的形状取决于kernal_size, input_shape, padding, stride的值

    K: 卷积层中的过滤器数量,K = filters

    F: 卷积过滤器的高度和宽度, F = kernal_size

    H_in: 上一层级的高度

    W_in: 上一层级的宽度

    S: stride

    卷积层的深度始终为过滤器数量K

    如果padding=‘same', 那么卷积层的空间维度计算公式如下:

    height = ceil(float(H_in) / float(S))
    width = ceil(float(W_in) / float(S))

    如果padding = ‘valid', 那么卷积层的空间维度计算公式如下:

    height = ceil(float(H_in - F + 1) / float(S))
    width = ceil(float(W_in - F + 1) / float(S))

    可以使用如下形式检测卷积层的维度:

    from keras.models import Sequential
    from keras.layers import Conv2D
    
    model = Sequential()
    model.add(Conv2D(filters=32, kernel_size=3, strides=2, padding='same', 
     activation='relu', input_shape=(128, 128, 3)))
    model.summary()
    

    池化层

    keras中的最大池化层

    创建池化层,首先导入keras中的模块

    from keras.layers import MaxPooling2D

    然后用以下形式创建池化层

    MaxPooling2D(pool_size, strides, padding)

    参数

    pool_size:指定池化窗口高度和宽度的数字

    strides:垂直和水平stride,默认参数为pool_size

    padding:选项包括'valid'和'same',默认参数为'valid'

    示例:

    假设我要构建一个 CNN,并且我想通过在卷积层后面添加最大池化层,降低卷积层的维度。假设卷积层的大小是 (100, 100, 15),我希望最大池化层的大小为 (50, 50, 15)。

    要实现这一点,我可以在最大池化层中使用 2x2 窗口,stride 设为 2,代码如下:

    MaxPooling2D(pool_size=2, strides=2)

    如果你想将 stride 设为 1,但是窗口大小依然保留为 2x2,则使用以下代码:

    MaxPooling2D(pool_size=2, strides=1)

    可以使用如下形式检测最大池化层的维度:

    from keras.models import Sequential
    from keras.layers import MaxPooling2D
    
    model = Sequential()
    model.add(MaxPooling2D(pool_size=2, strides=2, input_shape=(100, 100, 15)))
    model.summary()

    以上这篇keras中的卷积层&池化层的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持北冥有鱼。


    广而告之:
    热门推荐:
    Laravel重写用户登录简单示例

    本文实例讲述了Laravel重写用户登录的方法。分享给大家供大家参考,具体如下: class AuthController extends Controller { // use ThrottlesLogins, AuthenticatesAndRegistersUsers; protected $redirectTo = 'admin/index'; protected $loginView = 'admin/login';···

    详解参数传递四种形式

    这篇文章是在日常的工作中总结出来的,下面把四种参数传递的形式展示给大家。 什么时候用GET,  查,删, 什么时候用POST,增,改  (特列:登陆用Post,因为不能让用户名和密码显示在URL上) 4种get传参方式 <html xmlns="http://www.w3.org/1999/xhtml"> <···

    实例讲解HTML5的meta标签的一些应用

    HTML 4.01 与 HTML 5 之间meta标签用法的主要差异: 在 HTML 5 中,不再支持 scheme 属性。 在 HTML 5 中,有一个新的 charset 属性,它使字符集的定义更加容易。 在 HTML 4.01 中,不得不这么写: XML/HTML Code复制内容到剪贴板 <meta http-equiv="content-t···

    PHP使用PDO操作数据库的乱码问题解决方法

    本文实例讲述了PHP使用PDO操作数据库的乱码问题解决方法。分享给大家供大家参考,具体如下: 当使用 PDO 连接操作数据库的时候,有时会出现:保存在数据库中的汉字为乱码。以文件为 UTF-8 格式,其解决方法如下: (1)实例化的对象直接执行 query() 方法或者 exec() 方法: &···

    javascript下操作css的float属性的特殊写法

    使用js操作css属性的写法是有一定的规律的:  1、对于没有中划线的css属性一般直接使用style.属性名即可。  如:obj.style.margin,obj.style.width,obj.style.left,obj.style.position等。  2、对于含有中划线的css属性,将每个中划线去掉并将每个中···

    php学习之数据类型之间的转换代码

    复制代码 代码如下: /*数据类型之间相互转换 * 一种是强制转换 * setType(变量,类型); //int,integer,float,double等等。 * 这个函数将原变量的类型改变,用var_dump();可以查看变量 * * 在赋值前使用(类型)的形式,不会改变原变量的类型 * $a=(int)"123abc"; * * $变量=i···

    深入剖析JavaScript编程中的对象概念

    JavaScript 中的所有事物都是对象:字符串、数值、数组、函数... 此外,JavaScript 允许自定义对象。 所有事物都是对象 JavaScript 提供多个内建对象,比如 String、Date、Array 等等。 对象只是带有属性和方法的特殊数据类型。 布尔型可以是一个对象 数字型可以是一个对象 字···

    EasyUI中的tree用法介绍

    真的是太忙了,本应该有好多东西可以写,但是没什么闲时间,每次想到写的时候,来点事就又给忘了。10月最后一天了,在忙也得把这篇文章写完,不然又得多一个空白月了。   这是之前带领成员开发一个小模块功能的时候,需要用到弹出窗口加载树状级联单位选择,最后决定···

    利用Canvas模仿百度贴吧客户端loading小球的方法示例

    前言 最近看到两个好玩的 demo,效果图如下: 今天趁着周末有空,用 H5 的 Canvas 仿了一下。这篇文章只实现第一个效果图。   这是我实现的效果: 实现原理 实现原理是参考简书的那篇文章,这里不再复述。现在我们来一步一步实现这样的效果。 第零步:画一个圆 源码如···

    10个超级有用的PHP代码片段果断收藏

    本文小编将为你奉上10个超级有用的PHP代码片段。 1.查找Longitudes与Latitudes之间的距离 function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) { $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(d···