1. 程式人生 > >關於gan的流程理解

關於gan的流程理解

標定 原理 得到 生成 kernel 重要 tran out ima

關於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的流程理解