解決keras GAN訓(xùn)練是loss不發(fā)生變化,accuracy一直為0.5的問題
1、Binary Cross Entropy
常用于二分類問題,當(dāng)然也可以用于多分類問題,通常需要在網(wǎng)絡(luò)的最后一層添加sigmoid進(jìn)行配合使用,其期望輸出值(target)需要進(jìn)行one hot編碼,另外BCELoss還可以用于多分類問題Multi-label classification.
定義:
For brevity, let x = output, z = target. The binary cross entropy loss is
loss(x, z) = - sum_i (x[i] * log(z[i]) + (1 - x[i]) * log(1 - z[i]))
對應(yīng)的代碼為:
def binary_crossentropy(t,o):
return -(t*tf.log(o+eps) + (1.0-t)*tf.log(1.0-o+eps))
2、Categorical cross-entropy

p are the predictions, t are the targets, i denotes the data point and j denotes the class.
適用于多分類問題,并使用softmax作為輸出層的激活函數(shù)的情況。
補充知識:訓(xùn)練GAN的一些小貼士
下面是我認(rèn)識到自己犯過的一些錯誤,以及我從中學(xué)到的一些東西。所以,如果你是GANs的新手,并沒有看到在訓(xùn)練方面取得很大的成功,也許看看以下幾個方面會有所幫助:
1、大卷積核和更多的濾波器
更大的卷積核覆蓋了前一層圖像中的更多像素,因此可以查看更多信息。5x5的核與CIFAR-10配合良好,在判別器中使用3x3核使判別器損耗迅速趨近于0。對于生成器,你希望在頂層的卷積層有更大的核,以保持某種平滑。在較低的層,我沒有看到改變內(nèi)核大小的任何主要影響。
濾波器的數(shù)量可以大量增加參數(shù)的數(shù)量,但通常需要更多的濾波器。我在幾乎所有的卷積層中都使用了128個濾波器。使用較少的濾波器,特別是在生成器中,使得最終生成的圖像過于模糊。因此,看起來更多的濾波器可以幫助捕獲額外的信息,最終為生成的圖像增加清晰度。
2、標(biāo)簽翻轉(zhuǎn)(Generated=True, Real=False)
雖然一開始看起來很傻,但對我有用的一個主要技巧是更改標(biāo)簽分配。
如果你使用的是Real Images = 1,而生成的圖像= 0,則使用另一種方法會有所幫助。正如我們將在后面看到的,這有助于在早期迭代中使用梯度流,并幫助使梯度流動。
3、使用有噪聲的標(biāo)簽和軟標(biāo)簽
這在訓(xùn)練判別器時是非常重要的。硬標(biāo)簽(1或0)幾乎扼殺了早期的所有學(xué)習(xí),導(dǎo)致識別器非??斓亟咏?損失。最后,我使用0到0.1之間的隨機數(shù)表示0標(biāo)簽(真實圖像),使用0.9到1.0之間的隨機數(shù)表示1標(biāo)簽(生成的圖像)。在訓(xùn)練生成器時不需要這樣做。
此外,增加一些噪音的訓(xùn)練標(biāo)簽也是有幫助的。對于輸入識別器的5%的圖像,標(biāo)簽被隨機翻轉(zhuǎn)。比如真實的被標(biāo)記為生成的,生成的被標(biāo)記為真實的。
4、使用批歸一化是有用的,但是需要有其他的東西也是合適的
批歸一化無疑有助于最終的結(jié)果。添加批歸一化后,生成的圖像明顯更清晰。但是,如果你錯誤地設(shè)置了卷積核或濾波器,或者識別器的損失很快達(dá)到0,添加批歸一化可能并不能真正幫助恢復(fù)。
5、每次一個類別
為了更容易地訓(xùn)練GANs,確保輸入數(shù)據(jù)具有相似的特征是很有用的。例如,與其在CIFAR-10的所有10個類中都訓(xùn)練GAN,不如選擇一個類(例如,汽車或青蛙)并訓(xùn)練GANs從該類生成圖像。DC-GAN的其他變體在學(xué)習(xí)生成多個類的圖像方面做得更好。例如,以類標(biāo)簽為輸入,生成基于類標(biāo)簽的圖像。但是,如果你從一個普通的DC-GAN開始,最好保持事情簡單。
6、查看梯度
如果可能的話,試著監(jiān)控梯度以及網(wǎng)絡(luò)中的損失。這些可以幫助你更好地了解訓(xùn)練的進(jìn)展,甚至可以幫助你在工作不順利的情況下進(jìn)行調(diào)試。
理想情況下,生成器應(yīng)該在訓(xùn)練的早期獲得較大的梯度,因為它需要學(xué)習(xí)如何生成真實的數(shù)據(jù)。另一方面,判別器并不總是在早期獲得較大的梯度,因為它可以很容易地區(qū)分真假圖像。一旦生成器得到足夠的訓(xùn)練,判別器就很難分辨真假圖像。它會不斷出錯,并得到大的梯度。
以上這篇解決keras GAN訓(xùn)練是loss不發(fā)生變化,accuracy一直為0.5的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python內(nèi)建類型int源碼學(xué)習(xí)
這篇文章主要為大家介紹了Python內(nèi)建類型int源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
pandas.DataFrame.drop_duplicates 用法介紹
這篇文章主要介紹了pandas.DataFrame.drop_duplicates 用法介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
YOLOv5改進(jìn)系列之增加小目標(biāo)檢測層
yolov5出來已經(jīng)很長時間了,所以有關(guān)yolov5的一些詳細(xì)介紹在這里就不一一介紹了,下面這篇文章主要給大家介紹了關(guān)于YOLOv5改進(jìn)系列之增加小目標(biāo)檢測層的相關(guān)資料,需要的朋友可以參考下2022-09-09
使用Python實現(xiàn)MP3格式轉(zhuǎn)化
這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)MP3格式轉(zhuǎn)化為wav,flac和ogg等,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2025-01-01
Python基礎(chǔ)學(xué)習(xí)之時間轉(zhuǎn)換函數(shù)用法詳解
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)之時間轉(zhuǎn)換函數(shù)用法,結(jié)合實例形式分析了Python常見的日期時間獲取、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2019-06-06

