更復(fù)雜的體系結(jié)構(gòu)能保證更好的模型嗎?
使用的數(shù)據(jù)集和數(shù)據(jù)預(yù)處理
我們將使用Kaggle的狗與貓數(shù)據(jù)集。它是根據(jù)知識(shí)共享許可證授權(quán)的,這意味著你可以免費(fèi)使用它:
該數(shù)據(jù)集相當(dāng)大——25000張圖像均勻分布在不同的類(lèi)中(12500張狗圖像和12500張貓圖像)。它應(yīng)該足夠大,以訓(xùn)練一個(gè)像樣的圖像分類(lèi)器。
你還應(yīng)該刪除train/cat/666.jpg和train/dog/11702.jpg圖像,這些已經(jīng)損壞,你的模型將無(wú)法使用它們進(jìn)行訓(xùn)練。
接下來(lái),讓我們看看如何使用TensorFlow加載圖像。
如何使用TensorFlow加載圖像數(shù)據(jù)
今天你將看到的模型將比前幾篇文章中的模型具有更多的層。
為了可讀性,我們將從TensorFlow中導(dǎo)入單個(gè)類(lèi)。如果你正在跟進(jìn),請(qǐng)確保有一個(gè)帶有GPU的系統(tǒng),或者至少使用Google Colab。
讓我們把庫(kù)的導(dǎo)入放在一邊:
這是很多,但模型會(huì)因此看起來(lái)格外干凈。
我們現(xiàn)在將像往常一樣加載圖像數(shù)據(jù)——使用ImageDataGenerator類(lèi)。
我們將把圖像矩陣轉(zhuǎn)換為0–1范圍,使用用三個(gè)顏色通道,將所有圖像調(diào)整為224x224。出于內(nèi)存方面的考慮,我們將barch大小降低到32:
以下是你應(yīng)該看到的輸出:
讓我們鼓搗第一個(gè)模型!
向TensorFlow模型中添加層會(huì)有什么不同嗎?
從頭開(kāi)始編寫(xiě)卷積模型總是一項(xiàng)棘手的任務(wù)。網(wǎng)格搜索最優(yōu)架構(gòu)是不可行的,因?yàn)榫矸e模型需要很長(zhǎng)時(shí)間來(lái)訓(xùn)練,而且有太多的參數(shù)需要檢查。實(shí)際上,你更有可能使用遷移學(xué)習(xí)。這是我們將在不久的將來(lái)探討的主題。
今天,這一切都是為了理解為什么在模型架構(gòu)上大刀闊斧是不值得的。我們用一個(gè)簡(jiǎn)單的模型獲得了75%的準(zhǔn)確率,所以這是我們必須超越的基線(xiàn)。
模型1-兩個(gè)卷積塊
我們將宣布第一個(gè)模型在某種程度上類(lèi)似于VGG體系結(jié)構(gòu)——兩個(gè)卷積層,后面是一個(gè)池層。濾波器設(shè)置如下,第一個(gè)塊32個(gè),第二個(gè)塊64個(gè)。
至于損失和優(yōu)化器,我們將堅(jiān)持基本原則——分類(lèi)交叉熵和Adam。數(shù)據(jù)集中的類(lèi)是完全平衡的,這意味著我們只需跟蹤準(zhǔn)確率即可:
model_1 = tf.keras.Sequential([
Conv2D(filters=32, kernel_size=(3, 3), input_shape=(224, 224, 3), activation='relu'),
Conv2D(filters=32, kernel_size=(3, 3), activation='relu'),
MaxPool2D(pool_size=(2, 2), padding='same'),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
MaxPool2D(pool_size=(2, 2), padding='same'),
Flatten(),
Dense(units=128, activation='relu'),
Dense(units=2, activation='softmax')
])
model_1.compile(
loss=categorical_crossentropy,
optimizer=Adam(),
metrics=[BinaryAccuracy(name='accuracy')]
)
model_1_h(yuǎn)istory = model_1.fit(
train_data,
validation_data=valid_data,
epochs=10
)
以下是經(jīng)過(guò)10個(gè)epoch后的訓(xùn)練結(jié)果:
看起來(lái)我們的表現(xiàn)并沒(méi)有超過(guò)基線(xiàn),因?yàn)轵?yàn)證準(zhǔn)確率仍然在75%左右。如果我們?cè)偌由弦粋(gè)卷積塊會(huì)發(fā)生什么?
模型2-三個(gè)卷積塊
我們將保持模型體系結(jié)構(gòu)相同,唯一的區(qū)別是增加了一個(gè)包含128個(gè)濾波器的卷積塊:
model_2 = Sequential([
Conv2D(filters=32, kernel_size=(3, 3), input_shape=(224, 224, 3), activation='relu'),
Conv2D(filters=32, kernel_size=(3, 3), activation='relu'),
MaxPool2D(pool_size=(2, 2), padding='same'),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
MaxPool2D(pool_size=(2, 2), padding='same'),
Conv2D(filters=128, kernel_size=(3, 3), activation='relu'),
Conv2D(filters=128, kernel_size=(3, 3), activation='relu'),
MaxPool2D(pool_size=(2, 2), padding='same'),
Flatten(),
Dense(units=128, activation='relu'),
Dense(units=2, activation='softmax')
])
model_2.compile(
loss=categorical_crossentropy,
optimizer=Adam(),
metrics=[BinaryAccuracy(name='accuracy')]
)
model_2_h(yuǎn)istory = model_2.fit(
train_data,
validation_data=valid_data,
epochs=10
)
日志如下:
效果變差了。雖然你可以隨意調(diào)整batch大小和學(xué)習(xí)率,但效果可能仍然不行。第一個(gè)架構(gòu)在我們的數(shù)據(jù)集上工作得更好,所以讓我們?cè)囍^續(xù)調(diào)整一下。
模型3-帶Dropout的卷積塊
第三個(gè)模型的架構(gòu)與第一個(gè)模型相同,唯一的區(qū)別是增加了一個(gè)全連接層和一個(gè)Dropout層。讓我們看看這是否會(huì)有所不同:
model_3 = tf.keras.Sequential([
Conv2D(filters=32, kernel_size=(3, 3), input_shape=(224, 224, 3), activation='relu'),
Conv2D(filters=32, kernel_size=(3, 3), activation='relu'),
MaxPool2D(pool_size=(2, 2), padding='same'),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
MaxPool2D(pool_size=(2, 2), padding='same'),
Flatten(),
Dense(units=512, activation='relu'),
Dropout(rate=0.3),
Dense(units=128),
Dense(units=2, activation='softmax')
])
model_3.compile(
loss=categorical_crossentropy,
optimizer=Adam(),
metrics=[BinaryAccuracy(name='accuracy')]
)
model_3_h(yuǎn)istory = model_3.fit(
train_data,
validation_data=valid_data,
epochs=10
)
以下是訓(xùn)練日志:
太可怕了,現(xiàn)在還不到70%!上一篇文章中的簡(jiǎn)單架構(gòu)非常好。反而是數(shù)據(jù)質(zhì)量問(wèn)題限制了模型的預(yù)測(cè)能力。
結(jié)論
這就證明了,更復(fù)雜的模型體系結(jié)構(gòu)并不一定會(huì)產(chǎn)生性能更好的模型。也許你可以找到一個(gè)更適合貓狗數(shù)據(jù)集的架構(gòu),但這可能是徒勞的。
你應(yīng)該將重點(diǎn)轉(zhuǎn)移到提高數(shù)據(jù)集質(zhì)量上。當(dāng)然,有20K個(gè)訓(xùn)練圖像,但我們?nèi)匀豢梢栽黾佣鄻有。這就是數(shù)據(jù)增強(qiáng)的用武之地。
感謝閱讀!
原文標(biāo)題 : 更復(fù)雜的體系結(jié)構(gòu)能保證更好的模型嗎?

發(fā)表評(píng)論
登錄
手機(jī)
驗(yàn)證碼
立即登錄即可訪(fǎng)問(wèn)所有OFweek服務(wù)
還不是會(huì)員?免費(fèi)注冊(cè)
忘記密碼請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
最新活動(dòng)更多
-
8月5日立即報(bào)名>> 【在線(xiàn)會(huì)議】CAE優(yōu)化設(shè)計(jì):醫(yī)療器械設(shè)計(jì)的應(yīng)用案例與方案解析
-
8月14日立即報(bào)名>> 【在線(xiàn)研討會(huì)】解析安森美(onsemi)高精度與超低功耗CGM系統(tǒng)解決方案
-
精彩回顧立即查看>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
-
精彩回顧立即查看>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
精彩回顧立即查看>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠(chǎng)展
-
精彩回顧立即查看>> OFweek 2025 具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
推薦專(zhuān)題
- 1 AI產(chǎn)業(yè)的新高度!英偉達(dá)成為全球首家市值破4萬(wàn)億美元的公司
- 2 傳魏建軍與賈躍亭合作,長(zhǎng)城汽車(chē)出海美國(guó)
- 3 一文讀懂:到底什么是 “具身智能” ?
- 4 黃仁勛:與雷軍長(zhǎng)期合作,共探AI智駕
- 5 具身智能泡沫爭(zhēng)議下,華映資本尋找「穿越周期者」
- 6 中國(guó)平安們欲靠AI守“陣地”
- 7 官宣:智元機(jī)器人借殼上市,A股人形機(jī)器人第一股!
- 8 華為讓渡“三界”銷(xiāo)售主導(dǎo)權(quán),智界高管:終于能全力奔跑了
- 9 借仿生手實(shí)現(xiàn)突圍,國(guó)產(chǎn)靈巧手破局“不可能三角”
- 10 DeepSeek R2加持,中國(guó)AI與芯片產(chǎn)業(yè)迎來(lái)新一輪協(xié)同進(jìn)化