<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          CGAN--條件生成對抗神經(jīng)網(wǎng)絡(luò)(文末留言免費(fèi)贈(zèng)書)

          共 4325字,需瀏覽 9分鐘

           ·

          2021-06-26 14:37




          CGAN概述

               原始的GAN在生成高維度數(shù)據(jù)時(shí),只能隨機(jī)生成,無法生成我們給定條件的數(shù)據(jù)。這極大的限制了GAN的應(yīng)用范圍,因?yàn)?,對于我們來說,僅僅生成足夠真實(shí)的數(shù)據(jù)(如圖片)沒有太大的意義,因?yàn)橹灰芷鸶咔逭障鄼C(jī),我們就能夠得到足夠多的、真實(shí)的圖片,所以,只有能夠生成我們指定條件的數(shù)據(jù),才有意義。
                有條件約束的GAN,將數(shù)字類別作為約束條件與隨機(jī)噪聲一起輸入到生成模型,使生成模型能夠生成指定的手寫數(shù)字。對應(yīng)的,CGAN的辨別模型的輸入也包含兩個(gè)部分,圖片和標(biāo)簽。





          一、CGAN模型架構(gòu)


                  CGAN的模型架構(gòu),如圖1所示

          1     CGAN模型架構(gòu)

             從圖1中可以看出,樣本數(shù)據(jù)中的圖片(x)和類別標(biāo)簽(y)對,一起輸入到辨別模型,除此之外,輸入到辨別模型的還有生成模型生成的圖片(Gz|y))與類別標(biāo)簽(y),辨別模型的目標(biāo)是將他們區(qū)分開。生成模型的輸入是類別標(biāo)簽(y)和隨機(jī)噪聲(z),輸出的是生成的手寫數(shù)字圖片。需要注意的是,這里的類別標(biāo)簽(y)來源于樣本數(shù)據(jù),而不是隨機(jī)生成的標(biāo)簽,只有這樣生成模型才能學(xué)習(xí)到如何生成指定類別的手寫數(shù)字。




          二、 生成模型架構(gòu)


                 CGAN的生成模型,如圖2所示。輸入的類別標(biāo)簽(y)和隨機(jī)噪聲(z),分別與包含200個(gè)和1000個(gè)神經(jīng)元的全連接層連接(類別標(biāo)簽先被轉(zhuǎn)換成one-hot張量),該全連接層之后緊接著一個(gè)批量正則化層,激活函數(shù)采用的是ReLU

          2    CGAN原始的生成模型架構(gòu)

             然后,將上述兩個(gè)全連接層串聯(lián)起來,與一個(gè)包含512個(gè)神經(jīng)元的全連接層連接起來,緊接著是帶泄露的ReLU激活函數(shù)、批量正則化函數(shù)。需要說明的是,在原始的CGAN論文中,該層似乎是1200個(gè)神經(jīng)元,但是,在實(shí)際模型訓(xùn)練過程中,筆者發(fā)現(xiàn)512個(gè)神經(jīng)元模型更容易訓(xùn)練。

             最后,連接到包含784個(gè)神經(jīng)元的全連接層,采用sigmoid激活函數(shù),緊接著是批量正則化層。由于sigmoid輸出的取值范圍是[0, 1],所以,在模型訓(xùn)練階段,我們讀取樣本數(shù)據(jù)時(shí),需要將樣本數(shù)據(jù)的取值范圍從[0,255]映射到[0, 1],這樣真實(shí)的樣本數(shù)據(jù)和生成的數(shù)據(jù)取值范圍才有可能一致。對應(yīng)的,在展示生成的圖片是,需要將生成的數(shù)據(jù)取值范圍映射到[-1, 1],才能正確的顯示圖片,否則,生成的圖片會變灰、變白,看起來很模糊。




          三、辨別模型架構(gòu)


                 CGAN的辨別模型,見圖3。樣本數(shù)據(jù)的圖片(x)首先與一個(gè)k=5、輸出神經(jīng)元個(gè)數(shù)為240Maxout網(wǎng)絡(luò)層連接。Maxout網(wǎng)絡(luò)層是全連接層的變種,原理和實(shí)現(xiàn)代碼見“7.1.4 Maxout網(wǎng)絡(luò)層”。類別標(biāo)簽分別(y)與一個(gè)k=5、輸出神經(jīng)元個(gè)數(shù)為50Maxout網(wǎng)絡(luò)層連接。

             其次,將上述兩個(gè)Maxout網(wǎng)絡(luò)層的輸出結(jié)果串聯(lián)起來,再與一個(gè)k=4、輸出神經(jīng)元個(gè)數(shù)為240Maxout網(wǎng)絡(luò)層連接。

             最后,將上述Maxout網(wǎng)絡(luò)層的輸出結(jié)果連接到一個(gè)只包含1個(gè)神經(jīng)元的全連接層,該全連接層采用sigmoid作為激活函數(shù)。

          3     CGAN原始的辨別模型架構(gòu)




          四、 Maxout網(wǎng)絡(luò)層原理


                 Maxout網(wǎng)絡(luò)層是原始全連接層的變種。原始的全連接層的計(jì)算過程,見圖4。此圖展示了輸入,輸出的計(jì)算過程。其中,是激活函數(shù),是權(quán)重,是偏置項(xiàng)。

          4       原始全連接層示意圖

             我們?nèi)匀灰暂斎?,輸出為例,展?/span>Maxout網(wǎng)絡(luò)層的計(jì)算過程,參見圖5。從圖5中可以看出,與原始的全連接層神經(jīng)網(wǎng)絡(luò)相比,Maxout網(wǎng)絡(luò)層中多了一個(gè)包含k個(gè)神經(jīng)元的隱藏層,輸入的分別與這k個(gè)神經(jīng)元連接,對應(yīng)的使用k組()權(quán)重參數(shù),輸出k個(gè)y,然后,這k個(gè)y輸入給求最大值(max)函數(shù),將求出的最大值作為Maxout的最終輸出。

          5    Maxout網(wǎng)絡(luò)層的計(jì)算過程示意圖





          五、 Maxout網(wǎng)絡(luò)層實(shí)現(xiàn)


                Maxout沒有內(nèi)置在TensorFlow 2.0的版本中,所以,我們來實(shí)現(xiàn)一個(gè)簡單的、自定義Maxout網(wǎng)絡(luò)層,命名為MaxoutDense

             實(shí)現(xiàn)自定義的Maxout網(wǎng)絡(luò)層,需要實(shí)現(xiàn)一個(gè)繼承tf.keras.layers.LayerMaxoutDense類,實(shí)現(xiàn)它的初始化函數(shù)、buid函數(shù)、以及call函數(shù)。其中,初始化函數(shù),用于接收MaxoutDense的超參,比如koutput_dims。build函數(shù)用于對權(quán)重參數(shù)進(jìn)行初始化,它是由父類在調(diào)用call函數(shù)之前自動(dòng)調(diào)用。由于初始化參數(shù)時(shí),需要根據(jù)輸入張量的形狀來計(jì)算參數(shù)的形狀,因此,build的輸入?yún)?shù)是input_shape,代表輸入張量的形狀。最后是call函數(shù),輸入?yún)?shù)是輸入張量,call函數(shù)用于執(zhí)行最終的計(jì)算。

                Maxout網(wǎng)絡(luò)層的實(shí)現(xiàn)代碼如下,我們將下面的代碼保存到maxout.py文件中備用。

          #!/usr/bin/env python3# -*- coding: UTF-8 -*-
          from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_function
          import tensorflow as tf # TensorFlow 2.0

          class MaxoutDense(tf.keras.layers.Layer): def __init__(self, k, output_dims, kernel_initializer=None): """ 參數(shù): k : k個(gè)神經(jīng)元一組 output_dims: 輸出的神經(jīng)元個(gè)數(shù) kernel_initializer: 參數(shù)初始化器,GAN模型訓(xùn)練困難,參數(shù)初始化必須小心。 在這里我們采用均值為0.0、方差為0.02的正態(tài)分布隨機(jī)數(shù)來填充 """ super(MaxoutDense, self).__init__() self.k = k self.output_dims = output_dims if kernel_initializer is None: kernel_initializer = tf.random_normal_initializer( mean=0.0, stddev=0.02) self.kernel_initializer = kernel_initializer
          def build(self, input_shape): """ 在調(diào)用call之前,根據(jù)輸入張量的形狀,初始化變量。 在調(diào)用call函數(shù)之前,由父類自動(dòng)調(diào)用。 """ d = input_shape[-1]
          self.W = tf.Variable(self.kernel_initializer( shape=[d, self.output_dims, self.k])) self.b = tf.Variable(self.kernel_initializer( shape=[self.output_dims, self.k]))
          def call(self, input): """ 執(zhí)行Maxout計(jì)算。 """ z = tf.tensordot(input, self.W, axes=1) + self.b # 對k組輸出結(jié)果,求最大值 z = tf.reduce_max(z, axis=2)
                  return z


               Maxout網(wǎng)絡(luò)層的調(diào)用示例代碼如下:

          # 將圖像連接到k=5、輸出神經(jīng)元個(gè)數(shù)為240的Maxout層image_h0 = MaxoutDense(k=5, output_dims=240)(image)
          # 將k=5、輸出神經(jīng)元個(gè)數(shù)為240的Maxout層增加到模型中model = Sequential( )model.add(MaxoutDense(k=5, output_dims=50))
                               本文選自----《GAN生成對抗神經(jīng)網(wǎng)絡(luò)原理與實(shí)踐》一書中,經(jīng)授權(quán)此公號。



          文末贈(zèng)書




          編輯推薦


          1. 全景:囊括GAN起源、發(fā)展和演變的全貌;

          2. 插圖:100余幅插圖,圖說GAN的原理;

          3. 實(shí)戰(zhàn):10余種有代表性的GAN案例代碼。

                 

          大家好!我們將這本《GAN生成對抗神經(jīng)網(wǎng)絡(luò)原理與實(shí)踐》贈(zèng)送給大家,你只需要留言評論即可,其中集贊最多的5位讀者可以免費(fèi)領(lǐng)取這本書。


          活動(dòng)截止時(shí)間:2021年6月26日  18:00整

          想要的讀者朋友請趕緊留言,邀請你的好友為你點(diǎn)贊吧!



          點(diǎn)個(gè)在看你最好看

          瀏覽 88
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲一线在线观看 | 青青草无码成人A片免费看 | 免费网站啪啪 | 免费成人AV | 激情骚逼网 |