欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Keras中Conv1D和Conv2D的區(qū)別說明

 更新時(shí)間:2020年06月19日 15:07:17   作者:哈哈進(jìn)步  
這篇文章主要介紹了基于Keras中Conv1D和Conv2D的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

如有錯(cuò)誤,歡迎斧正。

我的答案是,在Conv2D輸入通道為1的情況下,二者是沒有區(qū)別或者說是可以相互轉(zhuǎn)化的。首先,二者調(diào)用的最后的代碼都是后端代碼(以TensorFlow為例,在tensorflow_backend.py里面可以找到):

x = tf.nn.convolution(
 input=x,
 filter=kernel,
 dilation_rate=(dilation_rate,),
 strides=(strides,),
 padding=padding,
 data_format=tf_data_format)

區(qū)別在于input和filter傳遞的參數(shù)不同,input不必說,filter=kernel是什么呢?

我們進(jìn)入Conv1D和Conv2D的源代碼看一下。他們的代碼位于layers/convolutional.py里面,二者繼承的都是基類_Conv(Layer)。

進(jìn)入_Conv類查看代碼可以發(fā)覺以下代碼:

self.kernel_size = conv_utils.normalize_tuple(kernel_size, rank, 'kernel_size')
……#中間代碼省略
input_dim = input_shape[channel_axis]
kernel_shape = self.kernel_size + (input_dim, self.filters)

我們假設(shè),Conv1D的input的大小是(600,300),而Conv2D的input大小是(m,n,1),二者kernel_size為3。

進(jìn)入conv_utils.normalize_tuple函數(shù)可以看到:

def normalize_tuple(value, n, name):
 """Transforms a single int or iterable of ints into an int tuple.
 # Arguments
 value: The value to validate and convert. Could an int, or any iterable
  of ints.
 n: The size of the tuple to be returned.
 name: The name of the argument being validated, e.g. "strides" or
  "kernel_size". This is only used to format error messages.
 # Returns
 A tuple of n integers.
 # Raises
 ValueError: If something else than an int/long or iterable thereof was
 passed.
 """
 if isinstance(value, int):
 return (value,) * n
 else:
 try:
  value_tuple = tuple(value)
 except TypeError:
  raise ValueError('The `' + name + '` argument must be a tuple of ' +
    str(n) + ' integers. Received: ' + str(value))
 if len(value_tuple) != n:
  raise ValueError('The `' + name + '` argument must be a tuple of ' +
    str(n) + ' integers. Received: ' + str(value))
 for single_value in value_tuple:
  try:
  int(single_value)
  except ValueError:
  raise ValueError('The `' + name + '` argument must be a tuple of ' +
     str(n) + ' integers. Received: ' + str(value) + ' '
     'including element ' + str(single_value) + ' of type' +
     ' ' + str(type(single_value)))
 return value_tuple

所以上述代碼得到的kernel_size是kernel的實(shí)際大小,根據(jù)rank進(jìn)行計(jì)算,Conv1D的rank為1,Conv2D的rank為2,如果是Conv1D,那么得到的kernel_size就是(3,)如果是Conv2D,那么得到的是(3,3)

input_dim = input_shape[channel_axis] kernel_shape = self.kernel_size + (input_dim, self.filters)

又因?yàn)橐陨系膇nputdim是最后一維大小(Conv1D中為300,Conv2D中為1),filter數(shù)目我們假設(shè)二者都是64個(gè)卷積核。

因此,Conv1D的kernel的shape實(shí)際為:

(3,300,64)

而Conv2D的kernel的shape實(shí)際為:

(3,3,1,64)

剛才我們假設(shè)的是傳參的時(shí)候kernel_size=3,如果,我們將傳參Conv2D時(shí)使用的的kernel_size設(shè)置為自己的元組例如(3,300),那么傳根據(jù)conv_utils.normalize_tuple函數(shù),最后的kernel_size會(huì)返回我們自己設(shè)置的元組,也即(3,300)那么Conv2D的實(shí)際shape是:

(3,300,1,64),也即這個(gè)時(shí)候的Conv1D的大小reshape一下得到,二者等價(jià)。

換句話說,Conv1D(kernel_size=3)實(shí)際就是Conv2D(kernel_size=(3,300)),當(dāng)然必須把輸入也reshape成(600,300,1),即可在多行上進(jìn)行Conv2D卷積。

這也可以解釋,為什么在Keras中使用Conv1D可以進(jìn)行自然語言處理,因?yàn)樵谧匀徽Z言處理中,我們假設(shè)一個(gè)序列是600個(gè)單詞,每個(gè)單詞的詞向量是300維,那么一個(gè)序列輸入到網(wǎng)絡(luò)中就是(600,300),當(dāng)我使用Conv1D進(jìn)行卷積的時(shí)候,實(shí)際上就完成了直接在序列上的卷積,卷積的時(shí)候?qū)嶋H是以(3,300)進(jìn)行卷積,又因?yàn)槊恳恍卸际且粋€(gè)詞向量,因此使用Conv1D(kernel_size=3)也就相當(dāng)于使用神經(jīng)網(wǎng)絡(luò)進(jìn)行了n_gram=3的特征提取了。

這也是為什么使用卷積神經(jīng)網(wǎng)絡(luò)處理文本會(huì)非??焖儆行У膬?nèi)涵。

補(bǔ)充知識(shí):Conv1D、Conv2D、Conv3D

由于計(jì)算機(jī)視覺的大紅大紫,二維卷積的用處范圍最廣。因此本文首先介紹二維卷積,之后再介紹一維卷積與三維卷積的具體流程,并描述其各自的具體應(yīng)用。

1. 二維卷積

圖中的輸入的數(shù)據(jù)維度為

上述內(nèi)容沒有引入channel的概念,也可以說channel的數(shù)量為1。如果將二維卷積中輸入的channel的數(shù)量變?yōu)?,即輸入的數(shù)據(jù)維度變?yōu)椋?/p>

以上都是在過濾器數(shù)量為1的情況下所進(jìn)行的討論。如果將過濾器的數(shù)量增加至16,即16個(gè)大小為

二維卷積常用于計(jì)算機(jī)視覺、圖像處理領(lǐng)域。

2. 一維卷積

圖中的輸入的數(shù)據(jù)維度為8,過濾器的維度為5。與二維卷積類似,卷積后輸出的數(shù)據(jù)維度為

如果過濾器數(shù)量仍為1,輸入數(shù)據(jù)的channel數(shù)量變?yōu)?6,即輸入數(shù)據(jù)維度為

如果過濾器數(shù)量為

一維卷積常用于序列模型,自然語言處理領(lǐng)域。

3. 三維卷積

這里采用代數(shù)的方式對(duì)三維卷積進(jìn)行介紹,具體思想與一維卷積、二維卷積相同。

假設(shè)輸入數(shù)據(jù)的大小為

基于上述情況,三維卷積最終的輸出為

三維卷積常用于醫(yī)學(xué)領(lǐng)域(CT影響),視頻處理領(lǐng)域(檢測(cè)動(dòng)作及人物行為)。

以上這篇基于Keras中Conv1D和Conv2D的區(qū)別說明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python通過colorama模塊在控制臺(tái)輸出彩色文字的方法

    python通過colorama模塊在控制臺(tái)輸出彩色文字的方法

    這篇文章主要介紹了python通過colorama模塊在控制臺(tái)輸出彩色文字的方法,實(shí)例分析了colorama模塊的功能及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Python 合并拼接字符串的方法

    Python 合并拼接字符串的方法

    這篇文章主要介紹了Python 合并拼接字符串的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 利用Python操作MongoDB數(shù)據(jù)庫的詳細(xì)指南

    利用Python操作MongoDB數(shù)據(jù)庫的詳細(xì)指南

    MongoDB是由C++語言編寫的非關(guān)系型數(shù)據(jù)庫,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫系統(tǒng),其內(nèi)容存儲(chǔ)形式類似JSON對(duì)象,下面這篇文章主要給大家介紹了關(guān)于利用Python操作MongoDB數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • python函數(shù)局部變量、全局變量、遞歸知識(shí)點(diǎn)總結(jié)

    python函數(shù)局部變量、全局變量、遞歸知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于python函數(shù)局部變量、全局變量、遞歸知識(shí)點(diǎn),有興趣的朋友們學(xué)習(xí)參考下。
    2019-11-11
  • Python中的時(shí)序分析和可視化案例詳解

    Python中的時(shí)序分析和可視化案例詳解

    每個(gè)數(shù)據(jù)集都有自己的特征,我們使用它們的特征作為特征來深入了解數(shù)據(jù),在本文中,我們將討論一種重要的數(shù)據(jù)集,即時(shí)間序列數(shù)據(jù),感興趣的可以了解下
    2024-02-02
  • 利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    利用OpenCV給彩色圖像添加椒鹽噪聲的方法

    椒鹽噪聲是數(shù)字圖像中的常見噪聲,一般是圖像傳感器、傳輸信道及解碼處理等產(chǎn)生的黑白相間的亮暗點(diǎn)噪聲,椒鹽噪聲常由圖像切割產(chǎn)生,這篇文章主要給大家介紹了關(guān)于利用OpenCV給彩色圖像添加椒鹽噪聲的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 在python中利用最小二乘擬合二次拋物線函數(shù)的方法

    在python中利用最小二乘擬合二次拋物線函數(shù)的方法

    今天小編就為大家分享一篇在python中利用最小二乘擬合二次拋物線函數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python基于Twilio及騰訊云實(shí)現(xiàn)國(guó)際國(guó)內(nèi)短信接口

    Python基于Twilio及騰訊云實(shí)現(xiàn)國(guó)際國(guó)內(nèi)短信接口

    這篇文章主要介紹了Python基于Twilio及騰訊云實(shí)現(xiàn)國(guó)際國(guó)內(nèi)短信接口,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python性能分析工具pyinstrument提高代碼效率

    Python性能分析工具pyinstrument提高代碼效率

    今天分享一個(gè)超級(jí)實(shí)用的 Python 性能分析工具 pyinstrument ,可以快速找到代碼運(yùn)行最慢的部分,幫助提高代碼的性能。支持 Python 3.7+ 且能夠分析異步代碼,僅需一條命令即可顯示具體代碼的耗時(shí)。經(jīng)常寫 Python 的小伙伴一定要用一下
    2021-09-09
  • Python訪問MongoDB,并且轉(zhuǎn)換成Dataframe的方法

    Python訪問MongoDB,并且轉(zhuǎn)換成Dataframe的方法

    今天小編就為大家分享一篇Python訪問MongoDB,并且轉(zhuǎn)換成Dataframe的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評(píng)論