国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL)

這篇具有很好參考價值的文章主要介紹了AIGC實戰(zhàn)——深度學習 (Deep Learning, DL)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

0. 前言

深度學習 (Deep Learning, DL) 是貫穿所有生成模型 (Generative Model) 的共同特征,幾乎所有復雜的生成模型都以深度神經(jīng)網(wǎng)絡為核心,深度神經(jīng)網(wǎng)絡能夠?qū)W習數(shù)據(jù)結(jié)構(gòu)中的復雜關(guān)系,而不需要預先提取數(shù)據(jù)特征。在本節(jié)中,我們將介紹深度學習基本概念,并利用 Keras 構(gòu)建深度神經(jīng)網(wǎng)絡。

1. 深度學習基本概念

1.1 基本定義

深度學習 (Deep Learning, DL) 是一類機器學習算法,使用多個堆疊的處理單元層從非結(jié)構(gòu)化數(shù)據(jù)中學習高級表示。
為了充分理解深度學習,尤其是理解深度學習在生成建模中的重要性,我們將首先介紹深度學習中常見的非結(jié)構(gòu)化數(shù)據(jù),然后探討如何構(gòu)建多個堆疊的處理單元層解決分類任務。

1.2 非結(jié)構(gòu)化數(shù)據(jù)

多數(shù)類型的機器學習算法需要結(jié)構(gòu)化的表格數(shù)據(jù)作為輸入,表格數(shù)據(jù)中的每一列都用于描述觀測數(shù)據(jù)的特征。例如,一個人的年齡、收入和上個月購物網(wǎng)站訪問等特征有助于預測此人在下個月網(wǎng)絡購物的金額,可以使用這些特征的結(jié)構(gòu)化表格來訓練邏輯回歸、隨機森林或 XGBoost 等模型,并使用這些模型預測連續(xù)空間的響應變量(模型預測輸出結(jié)果),即此人的網(wǎng)購消費金額。在此示例中,每個特征都包含觀測數(shù)據(jù)的一部分信息,模型將學習這些特征如何相互作用以影響響應變量。
非結(jié)構(gòu)化數(shù)據(jù)指的是不能自然地將特征組織成列形式的數(shù)據(jù),例如圖像、音頻、文本和視頻等。其中,圖像具有空間結(jié)構(gòu),音頻或文本具有時間結(jié)構(gòu),而視頻數(shù)據(jù)兼具空間和時間結(jié)構(gòu),但由于數(shù)據(jù)不是以特征列的形式組織,因此稱為是非結(jié)構(gòu)化數(shù)據(jù),如下圖所示。

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

在非結(jié)構(gòu)化數(shù)據(jù)中,單個像素、頻率或字符幾乎不含任何信息。例如,知道一張圖像的第 3 行、第 4 列的像素是白色并不能幫助我們確定這張圖像是一只狗還是一只貓,知道一個句子的第 5 個單詞是字母 that 也不能幫助我們預測這段文本是關(guān)于電影還是體育的。
實際上,像素或字符只是嵌入到更高級信息特征(例如小狗圖像或 “football” 單詞)的一部分。無論圖像中的小狗被放置屋子里或馬路邊,圖像仍然包含小狗,只不過該信息將由不同的像素傳遞;無論文本中的 “football” 稍早或稍晚出現(xiàn),該文本仍然是關(guān)于足球的,只是該信息將由不同的字符位置提供。數(shù)據(jù)的細粒度和高度的空間依賴性破壞了像素或字符作為獨立信息特征的意義。
因此,如果我們對原始像素值訓練邏輯回歸、隨機森林或 XGBoost 模型,則訓練后的模型通常只能處理最簡單的分類任務,而在其他較復雜的任務中通常表現(xiàn)不佳。這些模型依賴于輸入特征具有的信息量且不具有空間依賴性。而深度學習模型可以直接從非結(jié)構(gòu)化數(shù)據(jù)中自行學習如何構(gòu)建高級信息特征。
深度學習也可以應用于結(jié)構(gòu)化數(shù)據(jù),但其真正的作用(尤其在生成模型領(lǐng)域)來自于其處理非結(jié)構(gòu)化數(shù)據(jù)的能力。通常,我們希望生成非結(jié)構(gòu)化數(shù)據(jù),比如新的圖像或文本,這就是為什么深度學習對于生成模型領(lǐng)域有如此深遠的影響的原因。

2. 深度神經(jīng)網(wǎng)絡

目前,大部分深度學習系統(tǒng)通過堆疊多個隱藏層構(gòu)建人工神經(jīng)網(wǎng)絡 (Artificial Neural Networks, ANNs)。因此,深度學習現(xiàn)在幾乎已經(jīng)成為了深度神經(jīng)網(wǎng)絡的同義詞。但需要注意的是,任何使用多個層來學習輸入數(shù)據(jù)的高級表示的系統(tǒng)都是深度學習(例如深度信念網(wǎng)絡和深度玻爾茲曼機)。
首先,我們詳細介紹神經(jīng)網(wǎng)絡的基本概念,然后了解它們?nèi)绾斡糜趶姆墙Y(jié)構(gòu)化數(shù)據(jù)中學習高級特征。

2.1 神經(jīng)網(wǎng)絡

神經(jīng)網(wǎng)絡是由一系列堆疊的層組成的,每一層包含多個單位,這些單元通過一組權(quán)重與前一層的單位相連接。有多種不同類型的層,其中最常見的是全連接層 (fully connected layer),也稱密集層 (dense layer),它將該層的所有單位直接連接到前一層的每個單位。所有相鄰層都是全連接層的神經(jīng)網(wǎng)絡被稱為多層感知器 (Multilayer Perceptron, MLP)。
輸入(例如圖像)依次通過網(wǎng)絡的每一層進行傳遞直到達到輸出層,這一過程稱為網(wǎng)絡的前向傳播過程。具體而言,每個單元對其輸入的加權(quán)求和結(jié)果應用非線性變換,并將輸出傳遞到下一層。前向傳播過程的最終輸出層是該過程的最終結(jié)果,其中每個單元輸出原始輸入屬于特定類別(例如微笑)的概率。

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

深度神經(jīng)網(wǎng)絡通過尋找每個層的權(quán)重集,以產(chǎn)生最準確的預測,尋找最優(yōu)權(quán)重的過程就是網(wǎng)絡訓練 (training)。
在訓練過程中,圖像會按批 (batch) 傳遞給神經(jīng)網(wǎng)絡,然后將預測輸出與實際結(jié)果進行比較。例如,網(wǎng)絡可能對一個微笑的人臉圖像輸出 80% 的概率,對一個不微笑的人臉的圖像輸出 23% 的概率,而實際結(jié)果應輸出 100%0%,因此預測輸出和實際結(jié)果存在誤差。預測中的誤差會向后傳播到整個神經(jīng)網(wǎng)絡中,并沿著能夠最顯著改善預測的方向微調(diào)網(wǎng)絡權(quán)重,這個過程稱為反向傳播 (backpropagation)。每個神經(jīng)網(wǎng)絡單元都能夠逐漸識別出一個特定的特征,最終幫助神經(jīng)網(wǎng)絡做出更準確的預測。

2.2 學習高級特征

神經(jīng)網(wǎng)絡的關(guān)鍵特性是能夠在沒有人工指導的情況下從輸入數(shù)據(jù)中學習特征。換句話說,我們不需要進行任何特征工程,僅僅通過最小化預測誤差的指導,模型就可以自動學習最優(yōu)權(quán)重。
例如,在上一小節(jié)介紹的神經(jīng)網(wǎng)絡中,假設它已經(jīng)完成訓練能夠準確地預測給定輸入面部是否微笑:

  • 單元 A 接收輸入像素值
  • 單元 B 將其輸入值組合起來,當某個低級特征(如邊緣)存在時,它會被激活
  • 單元 C 與單元 D 等將低級特征組合在一起,當圖像中出現(xiàn)更高級別的特征(如眼睛)時,它會被激活
  • 單元 E 將高級特征組合在一起,當圖像中的人物出現(xiàn)微笑時,它會被激活

每個網(wǎng)絡層中的單元能夠通過組合前一層的低級特征表示學習到原始輸入的復雜特征,這是在網(wǎng)絡訓練過程自動學習的,我們不需要告訴每個單元要學習什么,或者它要學習高級特征還是低級特征。
輸入層和輸出層之間的層被稱為隱藏層 (hidden layers),深度神經(jīng)網(wǎng)絡可以擁有任意數(shù)量的隱藏層。通過堆疊大量的網(wǎng)絡層,神經(jīng)網(wǎng)絡可以逐漸從淺層的低級特征中捕捉信息,學習越來越高級別的特征。例如,ResNet 是設計用于圖像識別的深度神經(jīng)網(wǎng)絡,包含 152 層。
接下來,我們將深入介紹深度學習中的常用技術(shù),并使用 TensorFlowKeras 庫構(gòu)建深度神經(jīng)網(wǎng)絡。

3. TensorFlow 和 Keras

TensorFlow 是由 Google 開發(fā)的用于機器學習的開源 Python 庫。TensorFlow 是構(gòu)建機器學習解決方案最常用的框架之一,其因張量 (tensor) 操作而得名。在深度學習中,張量只是存儲流經(jīng)神經(jīng)網(wǎng)絡的數(shù)據(jù)的多維數(shù)組。它提供了訓練神經(jīng)網(wǎng)絡所需的底層功能,例如高效計算任意可微表達式的梯度和執(zhí)行張量操作。
Keras 是建立在 TensorFlow 上的高級 API,它非常靈活且擁有非常易于使用的 API,是入門深度學習的理想選擇。此外,Keras 通過其函數(shù)式 API 提供了許多有用的構(gòu)建模塊,可以通過將它們連接在一起來創(chuàng)建復雜的深度學習架構(gòu)。
使用 TensorFlowKeras 組合能夠在生產(chǎn)環(huán)境中構(gòu)建復雜網(wǎng)絡,可以快速實現(xiàn)所設計的網(wǎng)絡模型。接下來,我們使用 Keras 構(gòu)建多層感知器(Multilayer PerceptronMLP)。

4. 多層感知器 (MLP)

在本節(jié)中,我們將使用監(jiān)督學習訓練一個 MLP 來對指定圖像進行分類。監(jiān)督學習是一種機器學習算法,通過帶有標記的數(shù)據(jù)集進行訓練,監(jiān)督學習仍然在許多類型的生成模型中扮演重要角色。換句話說,用于訓練的數(shù)據(jù)集包括帶有輸入數(shù)據(jù)相應的輸出標簽。算法的目標是學習輸入數(shù)據(jù)和輸出標簽之間的映射關(guān)系,以便它可以對新的、未見過的數(shù)據(jù)進行預測。

4.1 準備數(shù)據(jù)

在本節(jié)中,我們將使用 CIFAR-10 數(shù)據(jù)集,這是一個 Keras 內(nèi)置的數(shù)據(jù)集,其包含 60,00032×32 像素的彩色圖像,每張圖片都被分類到其所屬的類別(共有 10 個類別)。

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

默認情況下,圖像數(shù)據(jù)中每個像素的默認值為在 0255 之間的整數(shù)。我們首先需要通過將這些值縮放到 01 之間來預處理圖像,因為神經(jīng)網(wǎng)絡在每個輸入的絕對值小于 1 時效果最好。
我們還需要將圖像的整數(shù)標簽轉(zhuǎn)換為獨熱編碼 (one-hot) 向量,因為神經(jīng)網(wǎng)絡的輸出是圖像屬于每個類別的概率。如果圖像的類別整數(shù)標簽是 i,則它的獨熱編碼是長度為 10 (類別數(shù)量)的向量,除第 i 個元素值為 1 外,其他所有位置上元素值都為 0。

(1) 導入所需庫:

import numpy as np
import matplotlib.pyplot as plt
from keras import layers, models, optimizers, utils, datasets
NUM_CLASSES = 10

(2) 加載 CIFAR-10 數(shù)據(jù)集,其中 x_trainx_test 分別是形狀為 [50000, 32, 32, 3][10000, 32, 32, 3]numpy 數(shù)組,y_trainy_test 分別是形狀為 [50000, 1][10000, 1]numpy 數(shù)組,包含每個圖像的類別標簽,范圍在 09 之間:

(x_train, y_train), (x_test, y_test) = datasets.cifar10.load_data()

(3) 對每張圖像進行縮放,使得像素值介于 01 之間:

x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0

(4) 對標簽進行獨熱編碼,修改后的 y_trainy_test 的形狀分別為 [50000, 10][10000, 10]

y_train = utils.to_categorical(y_train, NUM_CLASSES)
y_test = utils.to_categorical(y_test, NUM_CLASSES)

訓練圖像數(shù)據(jù) (x_train) 存儲在形狀為 [50000, 32, 32, 3] 的張量中。這個數(shù)據(jù)集沒有列或行的概念,而是一個具有四個維度的張量,張量只是一個多維數(shù)組,它是矩陣超過兩個維度的擴展。這個張量的第一個維度引用了數(shù)據(jù)集中圖像的索引,第二和第三個維度與圖像的尺寸相關(guān),最后一個維度是通道(對于 RGB 圖像而言是紅色、綠色或藍色通道)。使用以下方式可以獲取圖像中指定像素的通道值:

# 獲取第100個圖像中像素 (10,10) 的綠色通道值
print(x_train[100, 10, 10, 1])

4.2 構(gòu)建模型

Keras 中,可以使用 Sequential 模型或函數(shù) API 來定義神經(jīng)網(wǎng)絡的結(jié)構(gòu)。
Sequential 模型用于快速定義一系列線性堆疊層(即一層直接緊隨著下一層,沒有任何分支)。我們可以使用 Sequential 類來定義 MLP 模型:

model = models.Sequential([
    layers.Flatten(input_shape=(32,32,3)),
    layers.Dense(200, activation='relu'),
    layers.Dense(150, activation='relu'),
    layers.Dense(10, activation='softmax'),
])

但許多模型需要從一個層傳遞輸出到多個后續(xù)層,或者一個層接收其上多個層的輸入。對于這些模型,Sequential 類就不再適用,我們需要使用更加靈活的函數(shù) API。隨著神經(jīng)網(wǎng)絡的架構(gòu)變得越來越復雜,函數(shù) API 將能夠更好的滿足需求,給予我們隨心所欲設計深度神經(jīng)網(wǎng)絡的自由。
接下來,我們使用使用函數(shù) API 構(gòu)建相同 MLP,在使用函數(shù) API 時,使用 Model 類來定義模型的整體輸入和輸出層:

input_layer = layers.Input((32, 32, 3))
x = layers.Flatten()(input_layer)
x = layers.Dense(200, activation="relu")(x)
x = layers.Dense(150, activation="relu")(x)
output_layer = layers.Dense(NUM_CLASSES, activation="softmax")(x)
model = models.Model(input_layer, output_layer)

使用以上兩種方法可以得到相同的模型:

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

神經(jīng)網(wǎng)絡層
為了構(gòu)建 MLP,我們使用了三種不同類型的層:Input、FlattenDense。接下來,我們詳細地介紹在 MLP 中使用的不同層和激活函數(shù)。
Input 層是神經(jīng)網(wǎng)絡的入口,以元組形式告訴網(wǎng)絡每個數(shù)據(jù)元素的形狀,不需要顯式地指定批大小,因為我們可以同時傳遞任意數(shù)量的圖像到 Input 層。
接下來,使用 Flatten 層將輸入展平成一個向量,得到一個長度為 32 × 32 × 3=3,072 的向量。這是由于后續(xù)的 Dense 層要求其輸入是一維的,而不是多維數(shù)組。而有些類型的層需要多維數(shù)組作為輸入,因此需要了解每種類型的層所需的輸入和輸出形狀,以理解何時需要使用 Flatten。
Dense 層是神經(jīng)網(wǎng)絡中最基本的層類型之一。它包含給定數(shù)量的單元,該層中的每個單元與前一層中的每個單元通過一個權(quán)重連接。給定單元的輸出是它從前一層接收到的輸入的加權(quán)和,然后通過非線性激活函數(shù)傳遞給下一層。激活函數(shù)用于確保神經(jīng)網(wǎng)絡能夠?qū)W習復雜函數(shù),而不僅僅輸出其輸入的線性組合。

激活函數(shù)
有多種類型的激活函數(shù),我們主要介紹以下三種激活函數(shù):ReLUsigmoidsoftmax。
ReLU (Rectified Linear Unit) 激活函數(shù)在輸入為負時定義為 0,否則等于輸入值。LeakyReLU 激活函數(shù)與 ReLU 非常相似,關(guān)鍵區(qū)別在于:ReLU 激活函數(shù)對于小于 0 的輸入值返回 0,而 LeakyReLU 函數(shù)返回與輸入成比例的一個小的負數(shù)。如果 ReLU 單元始終輸出 0,則梯度同樣為 0,因此誤差無法通過該單元反向傳播。LeakyReLU 激活通過始終確保梯度非零來解決此問題?;?ReLU 的函數(shù)是在深度網(wǎng)絡的層之間使用的最可靠的激活函數(shù)之一,可以確保模型穩(wěn)定的訓練。
如果我們希望某一層的輸出介于 01 之間,則可以使用 sigmoid 激活函數(shù),例如用于具有一個輸出單元的二分類問題。下圖為 ReLULeakyReLUsigmoid 激活函數(shù)的函數(shù)圖像:

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

如果我們希望某一網(wǎng)絡層的輸出總和等于 1,則可以使用 softmax 激活函數(shù),例如在多類別分類問題中,每個觀測樣本只屬于一個類別,函數(shù)定義如下:
y i = e x i ∑ j = 1 J e x j y_i = \frac {e^{x_i}}{∑_{j=1}^J e^{x_j}} yi?=j=1J?exj?exi??
其中, J J J 是層中的單元總數(shù)。在上述構(gòu)建的神經(jīng)網(wǎng)絡中,我們在最后一層使用 softmax 激活函數(shù),以確保輸出包含 10 個概率值,這些概率值相加為 1,可表示圖像屬于每個類別的可能性。
Keras 中,可以在層內(nèi)定義激活函數(shù)或?qū)⑵渥鳛閱为毜膶佣x:

# 方法1
x = layers.Dense(units=200, activation = 'relu')(x)
# 方法2
x = layers.Dense(units=200)(x)
x = layers.Activation('relu')(x)

在以上代碼中,我們將輸入通過兩個 Dense 層,第一層有 200 個單元,第二層有 150 個單元,兩層均使用 ReLU 激活函數(shù)。

4.3 檢查模型

我們可以使用 model.summary() 方法來檢查神經(jīng)網(wǎng)絡每一層的形狀:

print(model.summary())

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

可以看到,輸入層 Input 的形狀與 x_train 的形狀相匹配,而輸出層的形狀與 y_train 的形狀匹配。Keras 使用 None 作為標記,表示它尚不明確將傳遞給網(wǎng)絡的觀測樣本數(shù)量。實際上,它也不需要知道,因為一次只傳遞 1 個觀測樣本對象或 1000 個觀測樣本對象給網(wǎng)絡是一樣的。這是由于張量操作使用線性代數(shù)在所有觀測樣本對象上同時進行。這也是為什么在 GPU 上訓練深度神經(jīng)網(wǎng)絡比 CPU 上訓練可以提高效率的原因之一,因為 GPU 針對大型張量操作進行了優(yōu)化。
summary 方法還會給出每個層中需要進行訓練的參數(shù)(權(quán)重)數(shù)量。如果模型訓練速度過慢,可以使用 summary 查看是否有包含大量權(quán)重的層。如果有此類層,可以考慮減少層中的單元數(shù)量以加速訓練。
最后,我們介紹如何計算每個層中的參數(shù)數(shù)量。默認情況下,給定層中的每個單元會連接到一個額外的偏置單元,用于確保即使來自前一層的所有輸入為 0,單元的輸出仍然可以是非零值。因此,在一個包含 200 個單元的 Dense 層中(假設輸入像素數(shù)為 3072),參數(shù)數(shù)量為 200 * (3072 + 1) = 614,600

4.4 編譯模型

使用優(yōu)化器和損失函數(shù)編譯模型:

opt = optimizers.Adam(learning_rate=0.0005)
model.compile(
    loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"]
)

接下來,我們詳細介紹損失函數(shù)和優(yōu)化器。

損失函數(shù)
損失函數(shù) (loss function) 用于神經(jīng)網(wǎng)絡將其預測輸出與真實值進行比較。它為每個觀測樣本對象返回一個值,值越大,表明神經(jīng)網(wǎng)絡針對該觀測樣本對象所得出的輸出結(jié)果就越差。
Keras 提供了許多內(nèi)置的損失函數(shù)可供選擇,我們也可以創(chuàng)建自定義損失函數(shù)。常用的損失函數(shù)包括均方誤差 (mean squared error)、分類交叉熵 (categorical cross-entropy) 和二元交叉熵 (binary cross-entropy)。我們需要根據(jù)實際問題選擇合適的損失函數(shù)。
如果神經(jīng)網(wǎng)絡旨在解決回歸問題(即輸出是連續(xù)值),那么可以使用均方誤差損失。均方誤差是每個輸出單元的實際值 y i y_i yi? 與預測值 p i p_i pi? 之差的平方的均值,其中均值是在所有 n n n 個輸出單元上進行計算:
M S E = 1 n Σ i = 1 n ( y i ? p i ) 2 MSE = \frac1 n Σ_{i=1}^n {(y_i - p_i)^2} MSE=n1?Σi=1n?(yi??pi?)2
如果需要處理分類問題,其中每個觀測樣本對象只屬于一個類別,那么可以使用分類交叉熵是作為損失函數(shù)。其定義如下:
? Σ i = 1 n y i l o g ( p i ) -Σ_{i=1}^n{y_ilog(p_i)} ?Σi=1n?yi?log(pi?)
如果需要處理具有一個輸出單元的二分類問題,或者每個觀測樣本可以同時屬干多個類別的多分類問題,則應該使用二元交叉熵:
? 1 n Σ i = 1 n ( y i l o g ( p i ) + ( 1 ? y i ) l o g ( 1 ? p i ) ) -\frac 1 n Σ_{i=1}^n {(y_ilog(p_i) + (1-y_i)log(1-p_i))} ?n1?Σi=1n?(yi?log(pi?)+(1?yi?)log(1?pi?))
優(yōu)化器
優(yōu)化器 (optimizer) 是根據(jù)損失函數(shù)的梯度來更新神經(jīng)網(wǎng)絡權(quán)重的算法。Adam 是最常用且穩(wěn)定的優(yōu)化器之一,在大多數(shù)情況下,除了學習率 (learning rate) 外,我們不需要調(diào)整 Adam 優(yōu)化器的默認參數(shù)。學習率越大,每個訓練步驟中權(quán)重的改變就越大。雖然使用較大的學習率在初始時訓練速度更快,但缺點是可能導致訓練不穩(wěn)定,并且可能無法找到損失函數(shù)的全局最小值。因此需要在訓練過程中調(diào)整該參數(shù)。
另一個常見的優(yōu)化器是 RMSProp,同樣,我們不需要過多調(diào)整此優(yōu)化器的默認參數(shù)。
我們將損失函數(shù)和優(yōu)化器都傳遞給模型的 compile 方法,并通過 metrics 參數(shù)指定我們在訓練期間希望監(jiān)測的其他指標,例如準確率。

4.5 訓練模型

到目前為止,我們還沒有向模型傳遞任何數(shù)據(jù),只是構(gòu)建了模型架構(gòu),并使用損失函數(shù)和優(yōu)化器編譯了模型。要傳遞數(shù)據(jù)訓練模型,只需調(diào)用 fit 方法:

model.fit(x_train, y_train, batch_size=32, epochs=20, shuffle=True)

其中,x_train 表示原始圖像數(shù)據(jù),y_train 表示 one-hot 編碼的類別標簽,batch_size 決定每個訓練步驟中將傳遞給網(wǎng)絡的觀測樣本數(shù)量,epochs 決定將完整的訓練數(shù)據(jù)展示給網(wǎng)絡的次數(shù),shuffle = True 表示每個訓練步驟中都會以無放回的方式從訓練數(shù)據(jù)中隨機抽取批數(shù)據(jù)。
訓練深度神經(jīng)網(wǎng)絡,用于預測 CIFAR-10 數(shù)據(jù)集中的圖像類別。訓練過程如下:

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

首先,將神經(jīng)網(wǎng)絡的權(quán)重初始化為很小的隨機值。然后,網(wǎng)絡執(zhí)行一系列的訓練步驟。在每個訓練步驟中,通過網(wǎng)絡傳遞一批圖像,并進行誤差反向傳播以更新權(quán)重。batch_size 決定每個訓練步驟的批數(shù)據(jù)中包含多少圖像。批大小越大,梯度計算越穩(wěn)定,但每個訓練步驟速度越慢。如果在每個訓練步驟中都使用整個數(shù)據(jù)集計算梯度,將非常耗時且計算量過大,因此通常將批大小設置在 32256 之間。
這個過程一直持續(xù)到數(shù)據(jù)集中的所有觀測樣本都被處理過 1 次為止,這樣就完成了第一個 epoch。然后在第二個 epoch 中,數(shù)據(jù)再次以批的形式通過網(wǎng)絡進行傳遞。重復以上過程,直到完整指定的 epoch 次數(shù)。
在訓練過程中,Keras 輸出訓練過程的進展情況,如下圖所示。可以看到訓練數(shù)據(jù)集被分成 1,563 個批(每批包含 32 個圖像),并且它已經(jīng)在網(wǎng)絡中展示了 10 次(即經(jīng)歷了 10epoch),每批的處理速率約為 2 毫秒。分類交叉熵損失從 1.8534 下降到 1.2557,準確率從 33.20% 增加到 55.20%。

4.6 評估模型

該模型在訓練集上的準確率為 55.50%,為了評估模型在從未見過的數(shù)據(jù)上表現(xiàn),可以使用 Keras 提供的 evaluate 方法:

model.evaluate(x_test, y_test)
# 313/313 [==============================] - 0s 826us/step - loss: 1.3732 - accuracy: 0.5118

輸出是我們監(jiān)測的指標列表:分類交叉熵和準確率??梢钥吹?,即使對于從未見過的圖像,該模型的準確率仍然為 51.18%,考慮到我們僅僅使用了一個非?;镜纳窠?jīng)網(wǎng)絡,49.0% 可以說是一個很好的結(jié)果。
可以使用 predict 方法查看測試集上的預測結(jié)果:

CLASSES = np.array(
    [
        "airplane",
        "automobile",
        "bird",
        "cat",
        "deer",
        "dog",
        "frog",
        "horse",
        "ship",
        "truck",
    ]
)

preds = model.predict(x_test)
preds_single = CLASSES[np.argmax(preds, axis=-1)]
actual_single = CLASSES[np.argmax(y_test, axis=-1)]

preds 是一個形狀為 [10000, 10] 的數(shù)組,即每個觀測樣本對應一個包含 10 個類別概率的向量。
使用 numpyargmax 函數(shù)將這個概率數(shù)組轉(zhuǎn)換回單個預測結(jié)果。其中,使用 axis = -1 指定數(shù)組在最后一個維度(即類別維度)上壓縮,因此 preds_single 的形狀為 [10000, 1]。
我們可以使用以下代碼查看圖片以及它們的標簽和預測結(jié)果:

n_to_show = 10
indices = np.random.choice(range(len(x_test)), n_to_show)

fig = plt.figure(figsize=(15, 3))
fig.subplots_adjust(hspace=0.4, wspace=0.4)

for i, idx in enumerate(indices):
    img = x_test[idx]
    ax = fig.add_subplot(1, n_to_show, i + 1)
    ax.axis("off")
    ax.text(
        0.5,
        -0.35,
        "pred = " + str(preds_single[idx]),
        fontsize=10,
        ha="center",
        transform=ax.transAxes,
    )
    ax.text(
        0.5,
        -0.7,
        "act = " + str(actual_single[idx]),
        fontsize=10,
        ha="center",
        transform=ax.transAxes,
    )
    ax.imshow(img)

plt.show()

下圖展示了模型的對隨機選擇數(shù)據(jù)的預測結(jié)果及其真實標簽:

AIGC實戰(zhàn)——深度學習 (Deep Learning, DL),AIGC-生成式人工智能實戰(zhàn),AIGC,深度學習,人工智能,原力計劃

小結(jié)

深度學習是一種機器學習算法,它通過構(gòu)建多層神經(jīng)網(wǎng)絡模型,自動地從輸入數(shù)據(jù)中進行特征學習,并輸出對應的預測結(jié)果。深度神經(jīng)網(wǎng)絡是構(gòu)建生成模型的基礎(chǔ),幾乎所有復雜的生成模型都以深度神經(jīng)網(wǎng)絡為核心。構(gòu)建生成模型時,其核心思想在于正確組合損失函數(shù)、激活函數(shù)和層形狀等。在本節(jié)中,介紹了生成模型與深度學習之間的聯(lián)系,以及深度神經(jīng)網(wǎng)絡模型中的各種基本組件,并使用 Keras 構(gòu)建了一個簡單的多層感知器。

系列鏈接

AIGC實戰(zhàn)——生成模型簡介
AIGC實戰(zhàn)——卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network, CNN)
AIGC實戰(zhàn)——自編碼器(Autoencoder)
AIGC實戰(zhàn)——變分自編碼器(Variational Autoencoder, VAE)
AIGC實戰(zhàn)——使用變分自編碼器生成面部圖像
AIGC實戰(zhàn)——生成對抗網(wǎng)絡(Generative Adversarial Network, GAN)
AIGC實戰(zhàn)——WGAN(Wasserstein GAN)文章來源地址http://www.zghlxwxcb.cn/news/detail-712975.html

到了這里,關(guān)于AIGC實戰(zhàn)——深度學習 (Deep Learning, DL)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Deep Learning Tuning Playbook(深度學習調(diào)參手冊中譯版)

    Deep Learning Tuning Playbook(深度學習調(diào)參手冊中譯版)

    由五名研究人員和工程師組成的團隊發(fā)布了《Deep Learning Tuning Playbook》,來自他們自己訓練神經(jīng)網(wǎng)絡的實驗結(jié)果以及工程師的一些實踐建議,目前在Github上已有1.5k星。原項目地址 本文為《Deep Learning Tuning Playbook》中文翻譯版本,全程手打,非機翻。因為本人知識水平有限,翻

    2023年04月27日
    瀏覽(31)
  • 基于深度學習的語音識別(Deep Learning-based Speech Recognition)

    基于深度學習的語音識別(Deep Learning-based Speech Recognition)

    隨著科技的快速發(fā)展,人工智能領(lǐng)域取得了巨大的進步。其中,深度學習算法以其強大的自學能力,逐漸應用于各個領(lǐng)域,并取得了顯著的成果。在語音識別領(lǐng)域,基于深度學習的技術(shù)也已經(jīng)成為了一種主流方法,極大地推動了語音識別技術(shù)的發(fā)展。本文將從深度學習算法的

    2024年02月04日
    瀏覽(88)
  • 深度學習實戰(zhàn)28-AIGC項目:自動生成定制化的PPT文件

    大家好,我是微學AI,今天給大家介紹一下深度學習實戰(zhàn)28-AIGC項目:自動生成定制化的PPT文件,AIGC項目是一個基于自然語言處理技術(shù)的創(chuàng)新性項目,旨在利用ChatGPT模型生成定制化的PPT文件。該項目主要應用于商務和教育領(lǐng)域,可以幫助用戶快速創(chuàng)建具有專業(yè)性和高質(zhì)量的P

    2024年02月08日
    瀏覽(30)
  • 深度學習實戰(zhàn)30-AIGC項目:自動生成思維導圖文件,解放雙手

    深度學習實戰(zhàn)30-AIGC項目:自動生成思維導圖文件,解放雙手

    大家好,我是微學AI,今天給大家介紹一下深度學習實戰(zhàn)30-AIGC項目:自動生成思維導圖文件,解放雙手,思維導圖是一種常見的工具,用于將復雜的信息和概念以圖形化方式展示出來。AIGC項目旨在將這種思維導圖的創(chuàng)建過程自動化,并通過使用ChatGPT作為生成器,使其變得更

    2024年02月14日
    瀏覽(18)
  • 第二章:Learning Deep Features for Discriminative Localization ——學習用于判別定位的深度特征

    第二章:Learning Deep Features for Discriminative Localization ——學習用于判別定位的深度特征

    ????????在這項工作中,我們重新審視了在[13]中提出的全局平均池化層,并闡明了它如何明確地使卷積神經(jīng)網(wǎng)絡(CNN)具有出色的定位能力,盡管它是在圖像級別標簽上進行訓練的。雖然這個技術(shù)之前被提出作為一種訓練規(guī)范化的手段, 但我們發(fā)現(xiàn)它實際上構(gòu)建了一個通

    2024年02月15日
    瀏覽(22)
  • 基于深度學習的目標檢測的介紹(Introduction to object detection with deep learning)

    基于深度學習的目標檢測的介紹(Introduction to object detection with deep learning)

    物體檢測的應用已經(jīng)深入到我們的日常生活中,包括安全、自動車輛系統(tǒng)等。對象檢測模型輸入視覺效果(圖像或視頻),并在每個相應對象周圍輸出帶有標記的版本。這說起來容易做起來難,因為目標檢測模型需要考慮復雜的算法和數(shù)據(jù)集,這些算法和數(shù)據(jù)集在我們說話的時

    2024年02月11日
    瀏覽(18)
  • 深度強化學習的變道策略:Harmonious Lane Changing via Deep Reinforcement Learning

    深度強化學習的變道策略:Harmonious Lane Changing via Deep Reinforcement Learning

    偏理論,假設情況不易發(fā)生 多智能體強化學習的換道策略,不同的智能體在每一輪學習后交換策略,達到零和博弈。 和諧駕駛僅依賴于單個車輛有限的感知結(jié)果來平衡整體和個體效率,獎勵機制結(jié)合個人效率和整體效率的和諧。 自動駕駛不能過分要求速度性能, 考慮單個車

    2024年01月17日
    瀏覽(15)
  • 深度學習實戰(zhàn)29-AIGC項目:利用GPT-2(CPU環(huán)境)進行文本續(xù)寫與生成歌詞任務

    大家好,我是微學AI,今天給大家介紹一下深度學習實戰(zhàn)29-AIGC項目:利用GPT-2(CPU環(huán)境)進行文本續(xù)寫與生成歌詞任務。在大家沒有GPU算力的情況,大模型可能玩不動,推理速度慢,那么我們怎么才能跑去生成式的模型呢,我們可以試一下GPT-2完成一些簡單的任務,讓大家在CPU環(huán)

    2024年02月08日
    瀏覽(25)
  • AIGC究竟是什么?深度解讀人工智能生成內(nèi)容

    隨著科技的飛速發(fā)展,人工智能已經(jīng)不再是遙不可及的未來技術(shù),而是與我們的生活密切相關(guān)。從智能手機到自動駕駛汽車,從聊天機器人到醫(yī)療診斷系統(tǒng),人工智能的應用越來越廣泛。在這個過程中,AIGC(人工智能生成內(nèi)容)作為一個新興的概念,正逐步走進公眾的視野。

    2024年02月09日
    瀏覽(108)
  • 基于深度學習的手寫數(shù)字識別項目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)

    基于深度學習的手寫數(shù)字識別項目GUI(Deep Learning Project – Handwritten Digit Recognition using Python)

    一步一步教你建立手寫數(shù)字識別項目,需要源文件的請可直接跳轉(zhuǎn)下邊的鏈接:All project 在本文中,我們將使用MNIST數(shù)據(jù)集實現(xiàn)一個手寫數(shù)字識別應用程序。我們將使用一種特殊類型的深度神經(jīng)網(wǎng)絡,即卷積神經(jīng)網(wǎng)絡。最后,我們將構(gòu)建一個GUI,您可以在其中繪制數(shù)字并立即

    2024年02月11日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包