1. 程式人生 > >用各種GAN生成MNIST數字

用各種GAN生成MNIST數字

用各種GAN生成MNIST數字

完整程式碼https://github.com/SongDark/GAN_collections

資料獲取

MNIST資料集的獲取可以參考這篇部落格:
https://blog.csdn.net/songbinxu/article/details/82992264
需要注意的是MNIST資料的值域範圍,有的源是原本的 [ 0 , 255

] [0,255] ,有的歸一化到了 [ 0 , 1 ] [0,1]


生成器和判別器

實現了CNN和MLP兩種版本。CNN結構參考自這裡,MLP結構參考自這裡


有關 Spectral Norm

dense層、conv2d層和deconv2d層中都實現了Spectral Normalization,可以自由選擇或取消。Spectral Normalization是用來限制判別器D的,不應該加到生成器G中。

有關 Gradient Clipping

所謂 Gradient Clipping(GC) 就是將引數限制在某個範圍內,比如 (

0.01 , 0.01 ) (-0.01,0.01) ,它也是用來限制判別器D的,不應該加到生成器G中。WGAN的原始版本必須加GC,以保證判別器D滿足Lipschiz連續條件。我的經驗是,即使是其他GAN型別,有時候加上GC也有奇效,比如在LSGAN裡,沒有加GC時是無法生成MNIST的,加上之後就好了。


各種GAN的目標函式

目前涉及到的有GAN、WGAN、WGAN-GP、DRAGAN、LSGAN和CGAN。
以後有空再補其他的。

GAN

(1) L D = E [ l o g ( D ( x ) ) ] + E [ l o g ( 1 D ( G ( z ) ) ] L G = E [ l o g ( D ( G ( z ) ) ) ] \begin{matrix} L_D=E[log(D(x))] + E[log(1-D(G(z))] \\ \\ L_G=E[log(D(G(z)))] \\ \end{matrix} \tag{1}

WGAN

(2) L D = E [ D ( x ) ] E [ D ( G ( z ) ) ] L G = E [ D ( G ( z ) ) ] W D c l i p ( W D , 0.1 , 0.1 ) \begin{matrix} L_D=E[D(x)]-E[D(G(z))] \\ \\ L_G=E[D(G(z))] \\ \\ W_D\leftarrow clip(W_D,-0.1,0.1) \end{matrix} \tag{2}

WGAN-GP

(3) L D = L D W G A N + λ E [ ( D ( α x ( 1 α G ( z ) ) ) 1 ) 2 ] L G = L G W G A N \begin{matrix} L_D=L_D^{WGAN}+\lambda E[(|\bigtriangledown D(\alpha x-(1-\alpha G(z)))| - 1)^2] \\ \\ L_G=L_G^{WGAN}\\ \end{matrix} \tag{3}

LSGAN

(4) L D = E [ ( D ( x ) 1 ) 2 ] + E [ D ( G ( z ) 2 ] L G = E [ ( D ( G ( z ) ) 1 ) 2 ] \begin{matrix} L_D=E[(D(x)-1)^2] + E[D(G(z)^2] \\ \\ L_G=E[(D(G(z))-1)^2] \\ \end{matrix} \tag{4}

DRAGAN

(5) L D = L D G A N + λ E [ ( D ( α x ( 1 α x p ) ) 1 ) 2 ] L G = L G G A N \begin{matrix} L_D=L_D^{GAN}+\lambda E[(|\bigtriangledown D(\alpha x-(1-\alpha x_p))| - 1)^2] \\ \\ L_G=L_G^{GAN}\\ \end{matrix} \tag{5}

CGAN

(6) L D = E [ l o g ( D ( x , c ) ) ] + E [ l o g ( 1 D ( G ( z ) , c ) ] L G = E [ l o g ( D ( G ( z ) , c ) ) ] \begin{matrix} L_D=E[log(D(x,c))] + E[log(1-D(G(z),c)] \\ \\ L_G=E[log(D(G(z),c))] \\ \end{matrix} \tag{6}

相關推薦

各種GAN生成MNIST數字

用各種GAN生成MNIST數字 完整程式碼:https://github.com/SongDark/GAN_collections 資料獲取 MNIST資料集的獲取可以參考這篇部落格: https://blog.csdn.net/songbinxu/article/details

各種GAN生成正態分佈

用GAN生成正態分佈     畢設中有一部分與GAN(Generative Adversarial Networks)相關,但是一直不work,因此準備重新從最簡單的GAN入手,實現一下試試看能不能發現什麼問題。     本文會用GAN從標準正態噪聲生成均值為3.5,標準差為0.7的正態

生成對抗網路GAN---生成mnist手寫數字影象示例(附程式碼)

Ian J. Goodfellow等人於2014年在論文Generative Adversarial Nets中提出了一個通過對抗過程估計生成模型的新框架。框架中同時訓練兩個模型:一個生成模型(generative model)G,用來捕獲資料分佈;一個判別模型(discri

利用GAN生成MNIST-demo

Epoch 1/300... Discriminator Loss: 0.0147(Real: 0.0034 + Fake: 0.0113)... Generator Loss: 4.4756 Epoch 2/300... Discriminator Loss: 0.8369(Real: 0.6440 + F

GAN學習總結三-Pytorch實現利用GAN進行MNIST手寫數字生成

GAN學習總結三-Pytorch實現利用GAN進行MNIST手寫數字生成 ​ 前面兩篇部落格分別介紹了GAN的基本概念和理論推導,理論聯絡實際,本節從程式碼的角度理解GAN網路的實現及相關細節,加深自己的理解. 整個實現過程如下: 匯入相關庫 import torch

Android Java程式碼編寫一款動態生成幸運數字的小遊戲

  截圖: 程式碼如下:   第三方依賴庫地址:https://github.com/AndroidMsky/RandomTextView 第一步:新增倉庫 allprojects { repositories { ... maven {

初識GANMNIST手寫數字的識別

初識GAN,因為剛好在嘗試用純python實現手寫數字的識別,所以在這裡也嘗試了一下。筆者也是根據網上教程一步步來的,不多說了,程式碼如下: from tensorflow.examples.tutorials.mnist import input_data i

NVIDIA新作解讀:GAN生成前所未有的高清影象(附PyTorch復現) | PaperDaily #15

在碎片化閱讀充斥眼球的時代,越來越少的人會去關注每篇論文背後的探索和思考。 在這個欄目裡,你會快速 get 每篇精選論文的亮點和痛點,時刻緊跟 AI 前沿成果。 點選本文底部的「閱讀

利用pytorch實現GAN(生成對抗網路)-MNIST影象-cs231n-assignment3

Generative Adversarial Networks(生成對抗網路) In 2014, Goodfellow et al. presented a method for training generative models called Ge

DCGAN生成手寫體數字影象程式碼解析

util.py檔案把專案中用到的工具函式整理到一起,包括onehot,影象剪裁,影象拼接 # !/usr/bin/python # -*- coding: utf-8 -*- import cv2 import scipy.misc import ip

根據戶id生成一個唯一邀請碼

情況 不知道 使用 需求 性能 暴露 subst num 隨機 需求描述:根據用戶id生成與之對應的唯一邀請碼,範圍為‘0-9A-Z’。 這個需求的重點在於加粗的部分,也就是要能夠根據邀請碼反推出用戶ID,這樣邀請碼就不用入庫了,在用戶量很大的情況下,性能可以得到不小的

練習:編寫循環,讓戶輸入戶名和密碼,如果戶為空或者數字,則重新輸入

color while pla 密碼 b2b 如果 lap use 循環 編寫循環,讓用戶輸入用戶名和密碼,如果用戶為空或者數字,則重新輸入 while True: user = input(‘請輸入用戶:‘) .strip() # 用戶輸入 ,去掉兩邊

解決戶自生成meta導入kylin後報錯問題Can not deserialize instance of java.lang.String[] out of VALUE_STRING token

pri ner hbase cau ebean 要求 eno pre property 報錯棧: 2017-06-22 20:48:07,101 ERROR [http-bio-7070-exec-5] cube.CubeManager:947 : Error dur

jmeter 計數器 (可自動生成數字、註冊專用)

技術分享 查看 png 結果 .cn image src 專用 設置 1、打開jmeter,創建好線程組後,添加計數器 2、設置計數器 3、添加HTTP請求,驗證所設置的計數器 4、填寫對應參數 5、添加查看結果樹,查看結果

1、變量,編碼,print,模塊調,數據類型(數字/浮點數/字符串等),數據運算,if else,for,while,break,continue

odin 運算符 雙精度 col 格式 for in yield python3 fin # -*- coding:utf8 -*- name = "Newname" 上訴代碼聲明了一個變量,命名為name,變量name的值為:"Newname" 變量定義的規則: 1、

QTP生成隨機數字+字母

隨機 常量 strong for size rand 過程 random 返回函數 以下函數實現隨機生成17位數(包括字母和數字),仍有改進的空間,可根據具體要求適當修改 Dim targetstring targetstring = targetrandstring("

一個很好的自動生成工具——mybatis generator

led ron 很好 user runtime rim mod 文件 path mybatis generator-自動生成代碼 準備材料:   一個文件夾,一個數據庫的驅動包,mybatis-generator-core-1.3.5.jar,一條生成語句   如圖:(我用

concat批量生成MySQL查詢語句

and mem local from rsh prop sql select lec select concat(‘grant all on ‘, table_schema,".",table_name," to ‘ gxsnerp‘@‘localhost ‘;") fr

使用jmeter+ant進行接口自動化測試(數據驅動)之二:利用apache-ant執行測試例並生成HTML格式測試報告

extras true -c 註釋符 www 文件的 介紹 ntc encoding 在 使用jmeter+ant進行接口自動化測試(數據驅動)之一 介紹了如何使用csv文件來批量管理接口 本次接著介紹如何利用apache-ant執行測試用例並生成HTML格式測試報告 ①下

eclipse手動生成web.xml方法

圖片 web項目 image 技術分享 -o vpd oss 新建 src 用eclipse新建的javaweb項目沒有部署描述符web.xml時的解決辦法:用eclipse手動生成web.xml方法