<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
      此為臨時鏈接,僅用于文章預覽,將在時失效
      人工智能開發者 正文
      發私信給AI研習社
      發送

      0

      從零教你寫一個完整的GAN

      本文作者: AI研習社 編輯:賈智龍 2017-04-27 16:24
      導語:GAN這么火,不想自己復現一下么?

      導言

      啦啦啦,現今 GAN 算法可以算作 ML 領域下比較熱門的一個方向。事實上,GAN 已經作為一種思想來滲透在 ML 的其余領域,從而做出了很多很 Amazing 的東西。比如結合卷積神經網絡,可以用于生成圖片。或者結合 NLP,可以生成特定風格的短句子。(比如川普風格的 twitter......)

      可惜的是,網絡上很多老司機開 GAN 的車最后都翻了,大多只是翻譯了一篇論文,一旦涉及算法實現部分就直接放開源的實現地址,而那些開源的東東,缺少了必要的引導,實在對于新手來說很是懵逼。所以兔子哥哥帶著開好車,開穩車的心態,特定來帶一下各位想入門 GAN 的其他小兔兔們來飛一會。

      GAN 的介紹與訓練

      先來闡述一下 GAN 的基本做法,這里不擺公式,因為你聽完后,該怎么搭建和怎么訓練你心里應該有數了。

      首先,GAN 全稱為 Generative Adversarial Nets(生成對抗網絡), 其構成分為兩部份:

      • Generator(生成器),下文簡稱 G

      • Discriminator(辨別器), 下文簡稱 D。

      在本文,為了方便小兔兔理解,使用一個較為簡單,也是 GAN 論文提及到的例子,訓練 G 生成符合指定均值和標準差的數據,在這里,我們指定 MEAN=4,STD=1.5 的高斯分布(正態分布)。

      這貨的樣子大概長這樣

      從零教你寫一個完整的GAN

      下面是數據生成的代碼:

      def sample_data(size, length=100):
         """    隨機mean=4 std=1.5的數據    :param size:    :param length:    :return:    """
         data = []
         for _ in range(size):
             data.append(sorted(np.random.normal(4, 1.5, length)))
         return np.array(data)

      在生成高斯分布的數據后,我們還對數據進行了排序,這時因為排序后的訓練會相對平滑。具體原因看這個 [Generative Adversarial Nets in TensorFlow (Part I)]

      這一段是生成噪音的代碼,既然是噪音,那么我們只需要隨機產生 0~1 的數據就好。

      def random_data(size, length=100):
         """    隨機生成數據    :param size:    :param length:    :return:    """
         data = []
         for _ in range(size):
             x = np.random.random(length)
             data.append(x)
         return np.array(data)

      隨機分布的數據長這樣

      從零教你寫一個完整的GAN

      接下來就是開擼 GAN 了。

      首先的一點就是,我們需要確定 G, 和 D 的具體結構,這里因為本文的例子太過于入門級,并不需要使用到復雜的神經網絡結構,比如卷積層和遞歸層,這里 G 和 D 只需全連接的神經網絡就好。全連接層的神經網絡本質就是矩陣的花式相乘。為神馬說是花式相乘呢,因為大多數時候,我們在矩陣相乘的結果后面會添加不同的激活函數。

      從零教你寫一個完整的GAN

      G 和 D 分別為三層的全鏈接的神經網絡,其中 G 的激活函數分別為,relu,sigmoid,liner,這里前兩層只是因為考慮到數據的非線性轉換,并沒有什么特別選擇這兩個激活函數的原因。其次 D 的三層分別為 relu,sigmoid,sigmoid。

      接下來就引出 GAN 的訓練問題。GAN 的思想源于博弈論,直白一點就是套路與反套路。

      先從 D 開始分析,D 作為辨別器,它的職責就是區分于真實的高斯分布和 G 生成的” 假” 高斯分布。所以很顯然,針對 D 來說,其需要解決的就是傳統的二分類問題。

      在二分類問題中,我們習慣用交叉熵來衡量分類效果。

      從零教你寫一個完整的GAN

      從公式中不難看出,在全部分類正確時,交叉熵會接近于 0,因此,我們的目標就是通過擬合 D 的參數來最小化交叉熵的值。

      D 既然是傳統的二分類問題,那么 D 的訓練過程也很容易得出了

      • 即先把真實數據標識為‘1’(真實分布),由生成器生成的數據標識為’0‘(生成分布),反復迭代訓練 D   ------------ (1)

      說 G 的訓練之前先來打個比方,假如一男一女在一起了,現在兩人性格出現矛盾了,女生并不愿意改變,但兩個人都想繼續在一起,這時,唯一的方法就是男生改變了。先忽略現實生活的問題,但從舉例的角度說,顯然久而久之男生就會變得更加 fit 這個女生。

      G 的訓練也是如此:

      • 先將 G 拼接在 D 的上方,即 G 的輸出作為 D 的輸入(男生女生在一起),而同時固定 D 的參數(女生不愿意改變),并將進入 G 的噪音樣本標簽全部改成'1'(目標是兩個人繼續在一起,沒有其他選擇),為了最小化損失函數,此時就只能改變 G 的每一層權重,反復迭代后 G 的生成能力因此得以改進。(男生更適合女生)  ------------ (2)

      反復迭代(1)(2),最終 G 就會得到較好的生成能力。

      補充一點,在訓練 D 的時候,我曾把數據直接放進去,這樣的后果是最后生成的數據,能學習到高斯分布的輪廓,但標準差和均值則和真實樣本相差很大。因此,這里我建議直接使用平均值和標準差作為 D 的輸入。

      這使得 D 在訓練前需要對數據進行預處理。

      def preprocess_data(x):
         """    計算每一組數據平均值和方差    :param x:    :return:    """
         return [[np.mean(data), np.std(data)] for data in x]

      G 和 D 的連接之間也需要做出處理。

      # 先求出G_output3的各行平均值和方差 

      MEAN = tf.reduce_mean(G_output3, 1)  # 平均值,但是是1D向量

      MEAN_T = tf.transpose(tf.expand_dims(MEAN, 0))  # 轉置

      STD = tf.sqrt(tf.reduce_mean(tf.square(G_output3 - MEAN_T), 1))

      DATA = tf.concat(1, [MEAN_T,
                          tf.transpose(tf.expand_dims(STD, 0))] # 拼接起來

      以下是損失函數變化圖:

      • 藍色是 D 單獨作二分類問題處理時的變化

      • 綠色是拼接 G 在 D 的上方后損失函數的變化

      從零教你寫一個完整的GAN

      不難看出,兩者在經歷反復震蕩 (互相博弈而導致),最后穩定于 0.5 附近,這時我們可以認為,G 的生成能力已經達到以假亂真,D 再也不能分出真假。

      接下來的這個就是 D-G 博弈 200 次后的結果:

      • 綠色是真實分布

      • 藍色是噪音原本的分布

      • 紅色是生成分布

      從零教你寫一個完整的GAN

      后話

      兔子哥哥的車這次就開到這里了。作為一個大三且數學能力較為一般的學生, 從比較感性的角度來描述了一次 GAN 的基本過程,有說得不對地方請各位見諒和指點。

      如果各位讀者需要更嚴格的數學公式和證明,可以閱讀 GAN 的開山之作([1406.2661] Generative Adversarial Networks) , 另外本文提及的代碼都可在這里找到(MashiMaroLjc/learn-GAN),有需要的童鞋也可以私信交流。

      這就是全部內容了,下次心情好的話懟 DCGAN,看看能不能生成點好玩的圖片,嗯~ 睡覺去~

      雷鋒網按:本文原作者兔子老大,原文來自他的知乎專欄

      雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知

      從零教你寫一個完整的GAN

      分享:
      相關文章

      編輯

      聚焦數據科學,連接 AI 開發者。更多精彩內容,請訪問:yanxishe.com
      當月熱門文章
      最新文章
      請填寫申請人資料
      姓名
      電話
      郵箱
      微信號
      作品鏈接
      個人簡介
      為了您的賬戶安全,請驗證郵箱
      您的郵箱還未驗證,完成可獲20積分喲!
      請驗證您的郵箱
      立即驗證
      完善賬號信息
      您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
      立即設置 以后再說
      主站蜘蛛池模板: 日韩人妻中文无码一区二区| 自贡市| 真实的单亲乱自拍对白免费| 日韩色图区| 91青青草视频在线观看的| 国产综合一区二区三区av| 亚洲电影在线观看| 熟女在线国产| 无码2区| 欧美日韩亚洲国产| 无码国产欧美一区二区三区不卡| 自拍性旺盛老熟女| 国产亚洲精选美女久久久久| 国产xxxx做受视频| 丰满人妻翻云覆雨呻吟| 蜜桃av一卡二卡三卡| 91激情| 二人世界完整版在线观看| 青青青青青手机视频在线观看视频| 刺激性视频黄页| 秋霞鲁丝片av无码少妇| 97香蕉碰碰人妻国产欧美| 小婕子伦流澡到高潮h| 久久精品中文字幕一区| 日本欧美大码aⅴ在线播放| 五月天亚洲色图| 99在线国产视频| 久久99精品久久久久久青青| 亚洲精品v欧洲精品v日韩精品| 人妻无码| 国产91色综合久久高清| 黑人巨大精品欧美一区二区免费| 野外做受三级视频| 国产欧美亚洲精品a| 一本色道久久综合亚洲精品按摩| 亚洲精品无码a| 国产午夜一区二区在线观看| 在线观看美女网站大全免费| 国产精品美女黑丝流水| 亚洲∧v久久久无码精品| 久久久久久久一线毛片|