關於gan的流程理解
關於gan的流程理解,
最近再看cyclegan所以慢慢來看,最後了解了原理來跑代碼就好
先說第一點:
架構
gan的架構就是兩個重要的點:1 生成器 2 分辨器
生成器的作用就是生成假的圖片
分辨器的作用就是在給一個正確的圖片和一個生成的假的圖片之後,他可以把正確的找出來
由此,其實我這裏提出好多問題:
1 如何生成假的圖片:反卷積
2 如何判斷,好像是一個二分類,兩個圖片都給過去,<0.5就是假的,>0.5就是真的,當然這個0.x就是sigmoid(wx+b)(也就是距離的sigmoid值,)可是還是有問題,同時給兩個圖片嗎?應該是給一個圖片,然後算距離?不是,給兩個圖片,都算標定值的距離,兩個物體只能二分類?
3 如何梯度下降?
帶著這幾個問題去讀源碼
面對第一個問題:如何生成圖片,源碼給出的解決方案是反卷積,
那麽如何反卷積呢?
就是這樣:
具體函數就一個:nn.ConvTranspose2d(ngf * mult, int(ngf * mult / 2),
kernel_size=3, stride=2,
padding=1, output_padding=1,
bias=use_bias),
首先的操作是:
1 進行卷積上圖第一行 feature:4*4 filter: 2*2 stride: 2 得到結果:2*2
2 進行反卷積:首先第一步:
1 補0:讓卷積後的結果,每一個元素後面都補(stride-1)個0 成為了 下左2
2 補0:對整體再補0,這個整體補0的個數是取決於補0之後,把卷積核完全顛倒過來,按照stride=1進行卷積,卷積之後要得到原始大小(上左一)的結果
關於gan的流程理解