GAN的實現和一些問題

2022-02-16 19:38:28 字數 1049 閱讀 1391

gan的學習是乙個二人博弈問題,最終目標是達到納什平衡。對抗指的是生成網路和判別網路的互相對抗。生成網路盡可能生成逼真樣本,判別網路則盡可能去判別該樣本是真實樣本,還是生成的假樣本。示意圖如下:

生成器盡量去生成一種合理的資料分布,可以理解為真實的資料, 從而讓判別器無法判別樣本究竟來自何方, 兩者的訓練, 一般來說, 是交替進行的, 生成器的loss通過其生成的資料輸入d來進行評估, 一般就是交叉熵 0or1, 0表示判別器識別出了這個樣本來自假樣本, 另一方面, 判別器也要盡量的去學習, 去分辨真假樣本,gan的目標也是優化2個分布的js散度

原始gan的目標優化函式如下:

\[\min\limits_ \max\limits_=e_}\quad[\log(d(x))]+e_}[1-\log(d(g(z))]

\]目標是最小化g,最大化d:

\[\max\limits_=e_}\quad [\log(d(x))]+e_}[1-\log(d(g(z))]

\]d最大話意味著:d要盡可能的識別真樣本d(x)和假樣本d(g(z)), 即將真樣本識別為1,假樣本識別為0,否則第一部分的公式將趨於負無窮,第二部分也將趨於負無窮:

\[d(x)\uparrow\space\rightarrow\space\log(d(x))\uparrow

\]\[d(g(z))\downarrow\space\rightarrow\space\log(d(g(z)))\downarrow\space\rightarrow\space 1-\log d(g(z))\downarrow

\]\[\min\limits_=e_}\quad [\log(d(x))]+e_}[1-\log(d(g(z))]

\]因為第一項是沒有用的(d部分),所以等價於

=>\(\max\limits_=e_}[\log(d(g(z))]\)

\[d_=\frac}+p_}

\]此處也解釋了為什麼當d的loss為0.5是認為是最優的d

g的目標就是生成和真實資料一樣的分,故g的最優情況為:

\[p_ = \frac+p_}

\]\[p_=p_

\]tf2**連線

關於多型實現的一些問題

首先多型實現必須依賴於兩個條件 1 子類重寫父類的虛函式 2 必須通過基類的指標或者引用來呼叫虛函式 實現多型的機制是通過虛函式表 函式指標的指標陣列 來實現的,虛表的最後是乙個nullptr 虛表的構建過程 1 子類拷貝父類的虛表 2 進行重寫過的函式指標進行相同偏移量位置的替換 3 將新增的虛函...

String 一些問題

前言 等號 對於基本型別,比較的是值,對於引用型別,比較的是記憶體位址。1.在物件池中建立,如果常量池中已經存在則返回常量池中已經有的。private static void test1 結果 true 2.乙個在string pool中,乙個在堆中。private static void test...

C 一些問題

1 if else語句和switch case語句的效率分析對比 switch效率高。switch的效率與分支數無關,當只有分支比較少的時候,if效率比switch高,因為switch有跳轉表。分支比較多,那當然是switch 根據大量的實際程式測試 不考慮不同的編譯器優化程度差異,假設都是最好的優...