CNN-Channels-Flatten

王柏鈞
3 min readMar 4, 2020

--

CNN的Channel變化以及與MixConv架構的討論、台灣人工智慧學校工程師日常、機器學習百日馬拉松

CNN與NN的淵源

卷積神經網路(CNN, Convolution Neural Network)是一種特殊形式的神經網路(NN, Neural Network)架構。神經網路是由許多感知機( Perceptron)一層層堆疊而成,每個感知機都是一條簡單的函數,如下所示:

轉自: https://theaisummer.com/Deep_learning/。 神經元示意圖,可以看到他其實是一種仿生技術。

而由神經元堆疊而成的神經網路也是一個函數,只是較為複雜。

「AI neuron network」的圖片搜尋結果
轉自: https://pse.is/QH6KX。 神經網路示意圖

CNN則是在神經網路中,使用到了Convolution Layer(卷積層)這種架構。Convolution Layer由Kernel構成,當神經元把輸出的tensor傳遞給Convolution Layer時,Kernel會進行如下運算:

Tensor(張量),可以理解成矩陣。跟向量有相同的概念,但向量一般只有 2維,tensor則是不論維度。

轉自: https://pse.is/P54SD。Convolution計算的示意圖。

簡單的描述計算過程:

  1. 把輸入的tensor其中的每一個pixel,與Kernel中對應位置的每一個pixel相乘
  2. 加總其乘積。

而Convolution Layer中Kernel的數量,就是Convolution Layer輸出tensor時,tensor的channel的值。

Ex: 如果我們有3個Kernel,他們分別會輸出一個2維的tensor,總共有3張,所以會有3個channel。
把他們加總起來(像漢堡一樣疊起來),所以輸出的tensor的channel(漢堡的厚度)就是3。

Flatten的作用

像我們剛才得到的輸出,其實是一個3維的tensor,channel的部分為3,所以下一層的神經元都會有3個資料的輸入源,但這3個輸入源其實都是2維的矩陣。

注意:其實 channel就是有幾個 kernel就對了。

轉自: https://pse.is/NLFZN。 channel的示意圖。

那麼當我們有3個kernel的輸出tensor時,就相當於有3個2維的tensor(矩陣)被輸出,如上所示。

但是2維的tensor是沒辦法被神經元接收的,所以我們必須把2維的tensor拉平,拉成長~~~長的一條直線,變成一維的矩陣(就是一個數列)。

而做這件事的函數,就是Flatten。

當我們使用Convolution Layer時,最後就必須加上Flatten處理。

--

--