第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

TensorFlow 入門教程

首頁 慕課教程 TensorFlow 入門教程 TensorFlow 入門教程 在 TensorFlow 之中使用卷積神經(jīng)網(wǎng)絡(luò)

在 TensorFlow 之中使用卷積神經(jīng)網(wǎng)絡(luò)

在之前的學(xué)習(xí)過程之中,我們已經(jīng)使用過卷積神經(jīng)網(wǎng)絡(luò),但是我們并沒有真正的了解該網(wǎng)絡(luò)的原理以及詳細的使用規(guī)則。因此這節(jié)課我們便學(xué)習(xí)以下什么是卷積神經(jīng)網(wǎng)絡(luò),并且了解如何在 TensorFlow 之中使用卷積神經(jīng)網(wǎng)絡(luò)。

1. 什么是卷積神經(jīng)網(wǎng)絡(luò)

卷積神經(jīng)網(wǎng)絡(luò),Convolutional Neural Network,簡稱 CNN ,是一種在圖像領(lǐng)域最常使用的一種神經(jīng)網(wǎng)絡(luò)。

卷積神經(jīng)網(wǎng)絡(luò)總體來說可以分為三個部分:

  • 卷積層:用于提取數(shù)據(jù)的特征;
  • 池化層:對提取的特征的規(guī)模進行縮小,減少運算量;
  • 全連接層:FC 層,在 TensorFlow 之中就是 Dense 層。

卷積層最常用的作用就是用來 “提取特征”,也就是將二維數(shù)據(jù)的 “特征” 提取出來,而我們最常使用的二維數(shù)據(jù)就是圖片數(shù)據(jù)。

那么什么是特征?簡單來說,特征就是數(shù)據(jù)中所包含的信息,我們對一個數(shù)據(jù)進行分類,利用的就是它的所包含的信息進行分類。而特征的形式多種多樣,可以是二維向量,也可以是三維向量,當然也可以是一維向量。

2. 卷積層的原理

要進行專業(yè)的原理解釋需要很多的數(shù)學(xué)推算,這里以平常最常見的二維卷積對圖片進行處理為例進行說明。

說到卷積層,就不得不談起卷積層的最重要的一個概念:卷積核。

卷積核可以看作是一個算子,它會對圖片數(shù)據(jù)的每個像素進行一次遍歷,并且得到一個新的數(shù)據(jù)。

比如說,我們目前有一個圖片數(shù)據(jù),它的具體的數(shù)據(jù)為如下所示,其中每個數(shù)據(jù)表示一個像素點的數(shù)據(jù)。

1 2 1 2 0
0 2 3 4 5
4 2 0 1 3
1 1 2 3 4
5 0 0 1 2

假如我們的卷積核為:

1 0 1
0 1 0
1 0 1

那么卷積核會從左上角開始掃描,按照從左到右,從上到下的順序進行掃描。

對于每一次掃描,得到的結(jié)果為:

結(jié)果 = 求和(卷積核每個位置的系數(shù) * 掃描區(qū)域之中對應(yīng)位置的數(shù)據(jù))

比如對于第一次掃描,掃描區(qū)域為:

1 2 1 
0 2 3 
4 2 0

那么我們得到結(jié)果為

1*1 + 2*0 + 1*1 +
0*0 + 2*1 + 3*0 +
4*1 + 2*0 + 0*1 = 8

用動畫形式展示來說就是 (圖片來源于鏈接):

圖片描述

3. 池化層的原理

池化層的原理相對而言比較簡單,它和卷積層一樣,都包括一個算子,只不過該算子在掃描的過程之中不會經(jīng)過之前掃描的部分,也就是說每個數(shù)據(jù)只會被掃描一遍。

用動畫形式展示來說就是 (圖片來源于鏈接):

圖片描述

不同的池化方法對應(yīng)著不同的池化層,我們最常使用的是最大池化與平均池化:

  • 最大池化:取掃描區(qū)域的最大值;
  • 平均池化:取掃描區(qū)域的平均值。

3. 如何在 TensorFlow 之中使用卷積神經(jīng)網(wǎng)絡(luò)

1. 如何在 TensorFlow 之中使用卷積層

在 TensorFlow 之中,使用卷積層的具體 API 為:

tf.keras.layers.Conv2D(
    filters, kernel_size, strides=(1, 1), padding='valid',
    dilation_rate=(1, 1), activation=None, ......)

其中我們最常用的參數(shù)的具體含義包括:

  • filters:得到特征的通道數(shù)量,比如一般 RGB 的通道為 3 ,我們可以指定 filter 來輸出指定通道數(shù)量的特征;
  • kernel_size:卷積核的大小,也就是算子的大小,可以為一個二維元組,也可以是一個整數(shù)(此時卷積核為正方形);
  • strides=(1, 1):卷積核移動的步伐,一般每次向右移動一格,每行向下移動一格,我們可以手動指定移動的步伐的大小。
  • padding=‘valid’:是否使用 Padding ,也就是說是否在原來數(shù)據(jù)的四周再加上一圈數(shù)據(jù),這樣可以讓原圖片的每個像素都在卷積核中央,可以選擇為 valid 或者 same ;
  • dilation_rate=(1, 1):是否采用空洞卷積,很少使用,只有在擴大視野的時候使用,這里不再展開描述;
  • activation=None:激活函數(shù),和我們之前接觸的卷積函數(shù)一樣。

2. 如何在 TensorFlow 之中使用池化層

在 TensorFlow 之中,使用池化層的具體 API 為:

tf.keras.layers.MaxPool2D(
    pool_size=(2, 2), strides=None, padding='valid', ...
)

其中我們最常用的參數(shù)與卷積層類似,它們的具體含義包括:

  • pool_size: 池化算子的大小,和卷積層的 kernel_size 相似;
  • strides: 步伐大小,與卷積層的 strides 相同含義;
  • padding:是否進行填充,可以選擇 valid 或者 same 。

3. 一個具體的卷積神經(jīng)網(wǎng)絡(luò)

由于我們在之前學(xué)習(xí)之中已經(jīng)采用過卷積神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練,因此同學(xué)們可以使用之前的數(shù)據(jù)進行訓(xùn)練,這里只是給出一個簡單的網(wǎng)絡(luò)模型,以及它的結(jié)構(gòu):

import tensorflow as tf

model = tf.keras.models.Sequential([
        tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
        tf.keras.layers.MaxPooling2D((2, 2)),
        tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
        tf.keras.layers.MaxPooling2D((2, 2)),
        tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),  
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(128, activation='relu'),
        tf.keras.layers.Dense(64, activation='relu'),
        tf.keras.layers.Dense(10, activation='softmax')])
model.summary()

我們可以得到數(shù)據(jù)為:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_5 (Conv2D)            (None, 30, 30, 32)        896       
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 15, 15, 32)        0         
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 13, 13, 64)        18496     
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 4, 4, 128)         73856     
_________________________________________________________________
flatten_4 (Flatten)          (None, 2048)              0         
_________________________________________________________________
dense_15 (Dense)             (None, 128)               262272    
_________________________________________________________________
dense_16 (Dense)             (None, 64)                8256      
_________________________________________________________________
dense_17 (Dense)             (None, 10)                650       
=================================================================
Total params: 364,426
Trainable params: 364,426
Non-trainable params: 0
_________________________________________________________________

在這個模型之中,我們默認輸入的圖像數(shù)據(jù)為 32*32 大小,并且擁有三個通道。在該模型之中,我們使用了三個二維卷積層與兩個最大池化層,從而達到提取特征的目的。最后我們使用了三個全連接層來進行預(yù)測并進行輸出。

4. 小結(jié)

這節(jié)課之中我們學(xué)習(xí)了什么是卷積神經(jīng)網(wǎng)絡(luò),同時我們有具體的學(xué)習(xí)了什么是卷積層以及什么是池化層。于此同時我們對于其兩著在 TensorFlow 之中的具體使用進行了詳細的說明,最后我們實現(xiàn)了一個卷積神經(jīng)網(wǎng)絡(luò),可以用于圖像分類處理。

圖片描述