keras实战-入门之一维卷积

keras实战-入门之一维卷积

一维卷积

最近接触到一维卷积,最开始的时候觉得应该很简单,然后网上看了几个例子,参数很奇怪,特别是模型的维度搞不明白,不知道怎么来的,看API也不太明白,可能我太笨了,所以自己琢磨了半天,才稍微弄了点明白,今天不怎么讲代码,就讲点原理吧。

二维卷积比较常见,基本上一个图片的样本的维度是(高,宽,通道),而一维是(高,宽),而对于句子来说,比如I am Jack,三个单词,但是单词一般会变成词向量,比如简单点3维的,我就三个词,就3维,那这样,这个一维的样本就是(3,3),高就是有几个单词,宽就是每个单词的维度。同理,如果是原始语音信号,是采样得到的,比如采样3秒,每秒16000的采样率,这样就得到48000个采样点,每个点对应一个幅度值,这里的高就是48000,宽就是幅度值,因为就是个值,是一维向量,所以样本就是(48000,1).这个应该好理解吧。

网上找了个图,最简单的,样本是(3,4,1,5,6),卷积核(-2,2,1),步长是1,直观看下吧:
在这里插入图片描述

卷积的过程我拿个简单的例子来说下:
输入是(64,1),经过两次卷积核最大池化后变成了(1, 16),看上去好神奇,有点反直觉啊,具体来看看吧。

inp = Input(shape=(64,1))
x = Conv1D(32, (9), activation='relu')(inp)
x = MaxPool1D((4))(x)
x = Conv1D(16, (9), activation='relu')(x)
x = MaxPool1D((4))(x)
model = Model(inp, x)

结构如下:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_6 (InputLayer)         (None, 64, 1)             0         
_________________________________________________________________
conv1d_22 (Conv1D)           (None, 56, 32)            320       
_________________________________________________________________
max_pooling1d_14 (MaxPooling (None, 14, 32)            0         
_________________________________________________________________
conv1d_23 (Conv1D)           (None, 6, 16)             4624      
_________________________________________________________________
max_pooling1d_15 (MaxPooling (None, 1, 16)             0         
=================================================================
Total params: 4,944
Trainable params: 4,944
Non-trainable params: 0
_________________________________________________________________

我来解释下维度的变化:

首先输入层(None, 64, 1) 表示样本数未定,但是每个样本是(64,1)是我们设定的。

经过conv1d_22 (Conv1D) 层得到(None, 56, 32),32是因为我们用了32个过滤器提取特征.。
56是因为卷积长度是9,默认步子是1,也就是每次拿长度为9的格子,走一格走遍64个,做向量点乘,得到一个值,直到走到最后一个能包含整个滤波器为止,剩下多出来的不要了。比如最开始是0-8和滤波器做点积,然后1-9,2-10,3-11一直到55-63,剩下的56-63小于9所以不要了。因此总共是55-0+1=56个,所以维度是(None, 56, 32) ,下面的也同理。

至于最大池化MaxPool1D就是等于除法,取整,比如 MaxPool1D((4))就是把刚才剩下的56/4刚好是14,但是最后的池化是6/4,取整是1,刚还最后剩下 (None, 1, 16)。如果不明白的话可以自己动手画画,我也是这么弄明白的,其实跟二维卷一样,就是好像看起来不是那么明显。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自网络,侵删。

  • 17
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值