操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    一、簡(jiǎn)介

    faked 是一個(gè)在前端開發(fā)中用于 mock 服務(wù)端接口的模塊,輕量簡(jiǎn)單,無需要在本地啟動(dòng) Server 也無需其它更多的資源,僅在瀏覽器中完成「請(qǐng)求拉截」,配合完整的「路由系統(tǒng)」輕而易舉的 mock 后端 API。

    GitHub Rep 地址: https://github.com/Houfeng/faked

    二、安裝 faked

    有兩種可選安裝方式,你可以通過傳統(tǒng)的 sciprt 方式引入 faked,如果你采用了 CommonJs 或 ES6 Modules 模塊方案,也可通過安裝 NPM Pageage 的方式安裝依賴。

    通過 script 引入:

    <script src="your-path/faked.min.js"></script>

    通過 npm 安裝:

    $ npm i faked --save-dev

    CommonJs 方式引用

    const faked=require('faked');

    ES6 Modules 方式引用

    import faked from 'faked'

    三、基本使用

    通過 faked.when 方法你幾乎就可以使用 faked 的所有功能了,盡管 faked 還提供了一組「快捷方法」, faked.when 方法說明如下:

    //指定單一 Http Method

    示例,模擬一個(gè)獲取用戶信息的接口,參考如下代碼:

    faked.when('get','/user/{id}', function(){

    每一個(gè) handlerthis 就是當(dāng)前請(qǐng)求上下文對(duì)象,對(duì)象有如下主要成員:

    • this.send(data, status, headers) 方法,用于響應(yīng)一個(gè)請(qǐng)求,status 默認(rèn)為 200

    • this.params 路由參數(shù)對(duì)象,用于訪問路由模式中的「路由參數(shù)」,如上邊示例中的 id

    • this.query 解析查詢字符串對(duì)應(yīng)的對(duì)象,比如 ?name=bob 可以通過 this.query.name 訪問

    • this.body 請(qǐng)求的主體內(nèi)容,通常會(huì)是一個(gè) json 對(duì)象,它取決于發(fā)起的請(qǐng)求。

    除了使用 send 方法,還可以直接「返回」數(shù)據(jù),參考如下代碼:

    faked.when('get','/user/{id}', function(){ return {name:'Bob'};

    當(dāng)然,在有「異步處理」時(shí)你也可以返回一個(gè) promise 對(duì)象或像上邊那樣用 send 方法。如果你只想 mock 數(shù)據(jù),還可以使用簡(jiǎn)化寫法,參考如下代碼:

    faked.when('get','/user/{id}', {name:'bob'});

    四、快捷方法

    faked 還基于 when 方法提供了一組快捷方法,對(duì)應(yīng)常用的 Http Methods,包括:

    get, post, put, delete, options, patch, head, copy, link, unlink, lock, unlock, view

    faked.get 寫一個(gè)示例:

    faked.get('/user/{id}',function(){ this.send({name:'Bob'});

    其它快捷方法和 faked.get 用法完全一致。

    五、路由系統(tǒng)

    在編輯 Mock API 時(shí), faked 提供了路由支持,如上邊看到的 /user/{id} ,就是一個(gè)路由「匹配模式」,其中 {id} 是一個(gè)路由參數(shù),當(dāng)多個(gè)路由同時(shí)匹配請(qǐng)求的 URL 時(shí),只會(huì)觸發(fā)第一個(gè)執(zhí)行,不同的 Http Method 的 URL 匹配模式可以相同,并不會(huì)沖突。路由參數(shù)還可以加「限定表達(dá)式」,參考如下代碼:

    // User Id 只能是數(shù)字faked.get('/user/{id:\d+}', {name:'test'});

    六、模擬網(wǎng)絡(luò)延時(shí)

    有時(shí)候,我們希望 Mock API 能延時(shí)響應(yīng)數(shù)據(jù),以模擬「網(wǎng)絡(luò)延時(shí)」,faked 目前支持固定的「延時(shí)設(shè)置」,參考如下代碼:

    const faked=require('faked');//所有的請(qǐng)求都將被延時(shí) 2 秒種再響應(yīng)用 mock 數(shù)據(jù)faked.delay=2000;

    當(dāng) delay 設(shè)置 0 時(shí),將禁用延時(shí)。

    七、設(shè)置超時(shí)時(shí)間

    faked 還可設(shè)置 Mock API 的最大響應(yīng)時(shí)間,這項(xiàng)設(shè)置存在的意義還在于「所有 Mock API 的 Handler 默認(rèn)都是異步的,如果忘記「返回或 Send」一個(gè)響應(yīng)結(jié)果,請(qǐng)求將會(huì)被一直掛起,有了超時(shí)設(shè)置,超時(shí)時(shí)將會(huì)拋出一個(gè)錯(cuò)誤,方便定位問題」,參考如下代碼:

    const faked=require('faked');//在超過 8 秒未響應(yīng)數(shù)據(jù)時(shí),將會(huì)打印一個(gè)錯(cuò)誤消息faked.timeout=8000;

    超時(shí)設(shè)置和延時(shí)設(shè)置并不會(huì)相互影響,超時(shí)計(jì)算是從延時(shí)結(jié)束后開始的。

    八、JSONP 處理

    faked 除了能 mock 常規(guī)的 ajaxfetch 請(qǐng)求,還能 mock 常常用來處理跨域問題的 jsonp 請(qǐng)求,faked 有兩個(gè)參數(shù)用于配置 jsonp,參考如下代碼:

    //指定服務(wù)端用于獲取「回調(diào)函數(shù)名」的 「QueryString 參數(shù)」

    九、注意事項(xiàng)

    faked 是一個(gè)「輔助開發(fā)」的工具,除非有特殊需要,一般情況下它不應(yīng)出現(xiàn)在你的生產(chǎn)代碼中,所以需要注意:

    1. 請(qǐng)勿將 faked 放到「生產(chǎn)環(huán)境」的應(yīng)用或頁(yè)面中

    2. 找一個(gè)合適的你項(xiàng)目的方式?jīng)Q定什么時(shí)引用 faked

    比如,在 webpak 中,可以根據(jù)環(huán)境變量決定入口文件,并只在 mock 的入口文件中引用 faked,示例:

    webpack.config.js

    module.exports={

    然后,在 index.mock.js 中這樣寫:

    require('./mock')require('./index');

    用于存放的 mock 代碼的 mock.js 可能是這樣的:

    const faked=require('faked');

    當(dāng)然,你可以根據(jù)實(shí)際情況,安排你的文或目錄結(jié)構(gòu)。

    -- END --

    選自Paperspace Blog

    作者:Felipe

    機(jī)器之心編譯

    參與:Jane W、黃小天

    「大多數(shù)人類和動(dòng)物學(xué)習(xí)是無監(jiān)督學(xué)習(xí)。如果智能是一塊蛋糕,無監(jiān)督學(xué)習(xí)是蛋糕的坯子,有監(jiān)督學(xué)習(xí)是蛋糕上的糖衣,而強(qiáng)化學(xué)習(xí)則是蛋糕上的櫻桃。我們知道如何做糖衣和櫻桃,但我們不知道如何做蛋糕。」

    Facebook 人工智能研究部門負(fù)責(zé)人 Yann LeCun 教授在講話中多次提及這一類比。對(duì)于無監(jiān)督學(xué)習(xí),他引用了「機(jī)器對(duì)環(huán)境進(jìn)行建模、預(yù)測(cè)可能的未來、并通過觀察和行動(dòng)來了解世界如何運(yùn)作的能力」。

    深度生成模型(deep generative model)是嘗試解決機(jī)器學(xué)習(xí)中無監(jiān)督學(xué)習(xí)問題的技術(shù)之一。在此框架下,需要一個(gè)機(jī)器學(xué)習(xí)系統(tǒng)來發(fā)現(xiàn)未標(biāo)記數(shù)據(jù)中的隱藏結(jié)構(gòu)。深度生成模型在許多應(yīng)用中有許多廣泛的應(yīng)用,如密度估計(jì)、圖像/音頻去噪、壓縮、場(chǎng)景理解(scene understanding)、表征學(xué)習(xí)(representation learning)和半監(jiān)督分類(semi-supervised classification)。

    變分自編碼器(Variational Autoencoder/VAE)使得我們可以在概率圖形模型(probabilistic graphical model)的框架下將這個(gè)問題形式化,在此框架下我們可以最大化數(shù)據(jù)的對(duì)數(shù)似然值的下界。在本文中,我們將介紹一種最新開發(fā)的架構(gòu),即對(duì)抗自編碼器(Adversarial Autoencoder),它由 VAE 啟發(fā),但它在數(shù)據(jù)到潛在維度的映射方式中(如果現(xiàn)在還不清楚,不要擔(dān)心,我們將在本文中重新提到這個(gè)想法)有更大的靈活性。關(guān)于對(duì)抗自編碼器最有趣的想法之一是如何通過使用對(duì)抗學(xué)習(xí)(adversarial learning)將先驗(yàn)分布(prior distribution)運(yùn)用到神經(jīng)網(wǎng)絡(luò)的輸出中。

    如果想將深入了解 Pytorch 代碼,請(qǐng)?jiān)L問 GitHub repo(https://github.com/fducau/AAE_pytorch)。在本系列中,我們將首先介紹降噪自編碼器和變分自編碼器的一些背景,然后轉(zhuǎn)到對(duì)抗自編碼器,之后是 Pytorch 實(shí)現(xiàn)和訓(xùn)練過程以及 MNIST 數(shù)據(jù)集使用過程中一些關(guān)于消糾纏(disentanglement)和半監(jiān)督學(xué)習(xí)的實(shí)驗(yàn)。

    背景

    降噪自編碼器(DAE)

    我們可在自編碼器(autoencoder)的最簡(jiǎn)版本之中訓(xùn)練一個(gè)網(wǎng)絡(luò)以重建其輸入。換句話說,我們希望網(wǎng)絡(luò)以某種方式學(xué)習(xí)恒等函數(shù)(identity function)f(x)=x。為了簡(jiǎn)化這個(gè)問題,我們將此條件通過一個(gè)中間層(潛在空間)施加于網(wǎng)絡(luò),這個(gè)中間層的維度遠(yuǎn)低于輸入的維度。有了這個(gè)瓶頸條件,網(wǎng)絡(luò)必須壓縮輸入信息。因此,網(wǎng)絡(luò)分為兩部分:「編碼器」用于接收輸入并創(chuàng)建一個(gè)「潛在」或「隱藏」的表征(representation);「解碼器」使用這個(gè)中間表征,并重建輸入。自編碼器的損失函數(shù)稱為「重建損失函數(shù)(reconstruction loss)」,它可以簡(jiǎn)單地定義為輸入和生成樣本之間的平方誤差:

    當(dāng)輸入標(biāo)準(zhǔn)化為在 [0,1] N 范圍內(nèi)時(shí),另一種廣泛使用的重建損失函數(shù)是交叉熵(cross-entropy loss)。

    變分自編碼器(VAE)

    變分自編碼器對(duì)如何構(gòu)造隱藏表征施加了第二個(gè)約束。現(xiàn)在,潛在代碼的先驗(yàn)分布由設(shè)計(jì)好的某概率函數(shù) p(x)定義。換句話說,編碼器不能自由地使用整個(gè)潛在空間,而是必須限制產(chǎn)生的隱藏代碼,使其可能服從先驗(yàn)分布 p(x)。例如,如果潛在代碼上的先驗(yàn)分布是具有平均值 0 和標(biāo)準(zhǔn)差 1 的高斯分布,則生成值為 1000 的潛在代碼應(yīng)該是不可能的。

    這可以被看作是可以存儲(chǔ)在潛在代碼中的信息量的第二類正則化。這樣做的好處是現(xiàn)在我們可以作為一個(gè)生成模型使用該系統(tǒng)。為了創(chuàng)建一個(gè)服從數(shù)據(jù)分布 p(x)的新樣本,我們只需要從 p(z)進(jìn)行采樣,并通過解碼器來運(yùn)行該樣本以重建一個(gè)新圖像。如果不施加這種條件,則潛在代碼在潛在空間中的分布是隨意的,因此不可能采樣出有效的潛在代碼來直接產(chǎn)生輸出。

    為了強(qiáng)制執(zhí)行此屬性,將第二項(xiàng)以先驗(yàn)分布與編碼器建立分布之間的 KL 散度(Kullback-Liebler divergence)的形式添加到損失函數(shù)中。由于 VAE 基于概率解釋,所使用的重建損失函數(shù)是前面提到的交叉熵?fù)p失函數(shù)。把它們放在一起我們有:

    其中 q(z|x) 是我們網(wǎng)絡(luò)的編碼器,p(z) 是施加在潛在代碼上的先驗(yàn)分布?,F(xiàn)在這個(gè)架構(gòu)可以使用反向傳播(backpropagation)聯(lián)合訓(xùn)練。

    對(duì)抗自編碼器(AAE)

    作為生成模型的對(duì)抗自編碼器

    變分自編碼器的主要缺點(diǎn)之一是,除了少數(shù)分布之外,KL 散度項(xiàng)的積分不具有封閉形式的分析解法。此外,對(duì)于潛在代碼 z 使用離散分布并不直接。這是因?yàn)橥ㄟ^離散變量的反向傳播通常是不可能的,使得模型難以有效地訓(xùn)練。這篇論文介紹了在 VAE 環(huán)境中執(zhí)行此操作的一種方法(https://arxiv.org/abs/1609.02200)。

    對(duì)抗自編碼器通過使用對(duì)抗學(xué)習(xí)(adversarial learning)避免了使用 KL 散度。在該架構(gòu)中,訓(xùn)練一個(gè)新網(wǎng)絡(luò)來有區(qū)分地預(yù)測(cè)樣本是來自自編碼器的隱藏代碼還是來自用戶確定的先驗(yàn)分布 p(z)。編碼器的損失函數(shù)現(xiàn)在由重建損失函數(shù)與判別器網(wǎng)絡(luò)(discriminator network)的損失函數(shù)組成。

    圖中顯示了當(dāng)我們?cè)跐撛诖a中使用高斯先驗(yàn)(盡管該方法是通用的并且可以使用任何分布)時(shí) AAE 的工作原理。最上面一行相當(dāng)于 VAE。首先,根據(jù)生成網(wǎng)絡(luò) q(z|x) 抽取樣本 z,然后將該樣本發(fā)送到根據(jù) z 產(chǎn)生 x' 的解碼器。在 x 和 x' 之間計(jì)算重建損失函數(shù),并且相應(yīng)地通過 p 和 q 反向推導(dǎo)梯度,并更新其權(quán)重。

    圖 1. AAE 的基本架構(gòu)最上面一行是自編碼器,而最下面一行是對(duì)抗網(wǎng)絡(luò),迫使到編碼器的輸出服從分布 p(z)。

    在對(duì)抗正則化部分,判別器收到來自分布為 q(z|x)的 z 和來自真實(shí)先驗(yàn) p(z) 的 z' 采樣,并為每個(gè)來自 p(z)的樣本附加概率。發(fā)生的損失函數(shù)通過判別器反向傳播,以更新其權(quán)重。然后重復(fù)該過程,同時(shí)生成器更新其參數(shù)。

    我們現(xiàn)在可以使用對(duì)抗網(wǎng)絡(luò)(它是自編碼器的編碼器)的生成器產(chǎn)生的損失函數(shù)而不是 KL 散度,以便學(xué)習(xí)如何根據(jù)分布 p(z)生成樣本。這種修改使我們能夠使用更廣泛的分布作為潛在代碼的先驗(yàn)。

    判別器的損失函數(shù)是

    其中 m 是微批尺寸(minibatch size),z 由編碼器生成,z' 是來自真實(shí)先驗(yàn)的樣本。

    對(duì)于對(duì)抗生成器,我們有

    通過查看方程式和曲線,你應(yīng)該明白,以這種方式定義的損失函數(shù)將強(qiáng)制判別器能夠識(shí)別假樣本,同時(shí)推動(dòng)生成器欺騙判別器。

    定義網(wǎng)絡(luò)

    在進(jìn)入這個(gè)模型的訓(xùn)練過程之前,我們來看一下如何在 Pytorch 中實(shí)現(xiàn)我們現(xiàn)在所做的工作。對(duì)于編碼器、解碼器和判別器網(wǎng)絡(luò),我們將使用 3 個(gè)帶有 ReLU 非線性函數(shù)與概率為 0.2 的 dropout 的 1000 隱藏狀態(tài)層的簡(jiǎn)單前饋神經(jīng)網(wǎng)絡(luò)(feed forward neural network)。

    在進(jìn)入這個(gè)模型的訓(xùn)練過程之前,我們來看一下如何在 Pytorch 中實(shí)現(xiàn)我們現(xiàn)在所做的工作。對(duì)于編碼器、解碼器和判別器網(wǎng)絡(luò),我們將使用 3 個(gè)帶有 ReLU 非線性函數(shù)與概率為 0.2 的 dropout 的 1000 隱藏狀態(tài)層的簡(jiǎn)單前饋神經(jīng)網(wǎng)絡(luò)(feed forward neural network)。

    #Encoderclass Q_net(nn.Module):def __init__(self): super(Q_net, self).__init__() self.lin1=nn.Linear(X_dim, N) self.lin2=nn.Linear(N, N) self.lin3gauss=nn.Linear(N, z_dim) def forward(self, x): x=F.droppout(self.lin1(x), p=0.25, training=self.training) x=F.relu(x) x=F.droppout(self.lin2(x), p=0.25, training=self.training) x=F.relu(x) xgauss=self.lin3gauss(x) return xgauss

    # Decoderclass P_net(nn.Module):def __init__(self): super(P_net, self).__init__() self.lin1=nn.Linear(z_dim, N) self.lin2=nn.Linear(N, N) self.lin3=nn.Linear(N, X_dim) def forward(self, x): x=self.lin1(x) x=F.dropout(x, p=0.25, training=self.training) x=F.relu(x) x=self.lin2(x) x=F.dropout(x, p=0.25, training=self.training) x=self.lin3(x) return F.sigmoid(x)

    # Discriminatorclass D_net_gauss(nn.Module):def __init__(self): super(D_net_gauss, self).__init__() self.lin1=nn.Linear(z_dim, N) self.lin2=nn.Linear(N, N) self.lin3=nn.Linear(N, 1) def forward(self, x): x=F.dropout(self.lin1(x), p=0.2, training=self.training) x=F.relu(x) x=F.dropout(self.lin2(x), p=0.2, training=self.training) x=F.relu(x) return F.sigmoid(self.lin3(x))

    從這個(gè)定義可以注意到一些事情。首先,由于編碼器的輸出必須服從高斯分布,我們?cè)谧詈笠粚硬皇褂萌魏畏蔷€性定義。解碼器的輸出具有 S 形非線性,這是因?yàn)槲覀兪褂靡云渲翟?0 和 1 范圍內(nèi)的標(biāo)準(zhǔn)化輸入。判別器網(wǎng)絡(luò)的輸出僅為 0 和 1 之間的一個(gè)數(shù)字,表示來自真正先驗(yàn)分布的輸入概率。

    一旦網(wǎng)絡(luò)的類(class)定義完成,我們創(chuàng)建每個(gè)類的實(shí)例并定義要使用的優(yōu)化器。為了在編碼器(這也是對(duì)抗網(wǎng)絡(luò)的生成器)的優(yōu)化過程中具有獨(dú)立性,我們?yōu)榫W(wǎng)絡(luò)的這一部分定義了兩個(gè)優(yōu)化器,如下所示:

    torch.manual_seed(10) Q, P=Q_net()=Q_net(), P_net(0) # Encoder/Decoder D_gauss=D_net_gauss() # Discriminator adversarial if torch.cuda.is_available(): Q=Q.cuda() P=P.cuda() D_cat=D_gauss.cuda() D_gauss=D_net_gauss().cuda()# Set learning ratesgen_lr, reg_lr=0.0006, 0.0008# Set optimizatorsP_decoder=optim.Adam(P.parameters(), lr=gen_lr) Q_encoder=optim.Adam(Q.parameters(), lr=gen_lr) Q_generator=optim.Adam(Q.parameters(), lr=reg_lr) D_gauss_solver=optim.Adam(D_gauss.parameters(), lr=reg_lr)

    訓(xùn)練步驟

    每個(gè)微批處理的架構(gòu)的訓(xùn)練步驟如下:

    1)通過編碼器/解碼器部分進(jìn)行前向路徑(forward path)計(jì)算,計(jì)算重建損失并更新編碼器 Q 和解碼器 P 網(wǎng)絡(luò)的參數(shù)。

    z_sample=Q(X) X_sample=P(z_sample) recon_loss=F.binary_cross_entropy(X_sample + TINY, X.resize(train_batch_size, X_dim) + TINY) recon_loss.backward() P_decoder.step() Q_encoder.step()

    2)創(chuàng)建潛在表征 z=Q(x),并從先驗(yàn)函數(shù)的 p(z) 取樣本 z',通過判別器運(yùn)行每個(gè)樣本,并計(jì)算分配給每個(gè) (D(z) 和 D(z')) 的分?jǐn)?shù)。

    Q.eval() z_real_gauss=Variable(torch.randn(train_batch_size, z_dim) * 5) # Sample from N(0,5)if torch.cuda.is_available(): z_real_gauss=z_real_gauss.cuda() z_fake_gauss=Q(X)

    3)計(jì)算判別器的損失函數(shù),并通過判別器網(wǎng)絡(luò)反向傳播更新其權(quán)重。在代碼中,

    # Compute discriminator outputs and loss D_real_gauss, D_fake_gauss=D_gauss(z_real_gauss), D_gauss(z_fake_gauss) D_loss_gauss=-torch.mean(torch.log(D_real_gauss + TINY) + torch.log(1 - D_fake_gauss + TINY)) D_loss.backward() # Backpropagate loss D_gauss_solver.step() # Apply optimization step

    4)計(jì)算生成網(wǎng)絡(luò)的損失函數(shù)并相應(yīng)地更新 Q 網(wǎng)絡(luò)。

    # GeneratorQ.train() # Back to use dropout z_fake_gauss=Q(X) D_fake_gauss=D_gauss(z_fake_gauss)G_loss=-torch.mean(torch.log(D_fake_gauss + TINY)) G_loss.backward() Q_generator.step()

    生成圖像

    現(xiàn)在我們嘗試可視化 AAE 是如何將圖像編碼成具有標(biāo)準(zhǔn)偏差為 5 的 2 維高斯?jié)撛诒碚鞯?。為此,我們首先?2 維隱藏狀態(tài)訓(xùn)練模型。然后,我們?cè)冢?10,-10)(左上角)到(10,10)(右下角)的潛在空間上產(chǎn)生均勻點(diǎn),并將其在解碼器網(wǎng)絡(luò)上運(yùn)行。

    潛在空間。同時(shí)在 x 和 y 軸上從 -10 到 10 均勻地探索 2 維潛在空間時(shí)的圖像重建。

    AAE 學(xué)習(xí)消糾纏表征(disentangled representation)

    數(shù)據(jù)的理想的中間表征將能夠捕獲產(chǎn)生觀測(cè)數(shù)據(jù)變異的潛在因素。Yoshua Bengio 及其同事在一篇論文中(http://www.cl.uni-heidelberg.de/courses/ws14/deepl/BengioETAL12.pdf)中注明:「我們希望我們的表征能夠消糾纏(解釋)變異因素。在輸入分布中,不同的數(shù)據(jù)解釋因素傾向于彼此獨(dú)立地變化」。他們還提到「最魯棒的特征學(xué)習(xí)方法是盡可能多地解釋因素,盡可能少地丟棄關(guān)于數(shù)據(jù)的信息」。

    在 MNIST(http://yann.lecun.com/exdb/mnist/)數(shù)據(jù)(這是關(guān)于手寫數(shù)字的大數(shù)據(jù)集)下,我們可以定義兩個(gè)潛在的因果性因素,一方面是生成的數(shù)字,另一方面是書寫的風(fēng)格或方式。

    監(jiān)督式方法

    在這部分中,我們比以前的架構(gòu)進(jìn)一步,并嘗試在潛在代碼 z 中強(qiáng)加某些結(jié)構(gòu)。特別地,我們希望架構(gòu)能夠在完全監(jiān)督的場(chǎng)景中將類別信息與字跡風(fēng)格分開。為此,我們將以前的架構(gòu)擴(kuò)展到下圖中。我們將潛在維度分為兩部分:第一個(gè) z 類似于上一個(gè)例子;隱藏代碼的第二部分現(xiàn)在是一個(gè)獨(dú)熱向量(one-hot vector)y 表示饋送到自編碼器的數(shù)字的身份。

    監(jiān)督式對(duì)抗自編碼器架構(gòu)。

    在該設(shè)置中,解碼器使用獨(dú)熱向量 y 和隱藏代碼 z 來重建原始圖像。編碼器的任務(wù)是編寫 z 中的風(fēng)格信息。在下面的圖片中,我們可以看到用 10000 個(gè)標(biāo)簽的 MNIST 樣本來訓(xùn)練這個(gè)架構(gòu)的結(jié)果。該圖顯示了重建圖像,其中對(duì)于每行,隱藏代碼 z 被固定為特定值,類別標(biāo)簽 y 的范圍從 0 到 9。字跡風(fēng)格在列的維度上有效地保存了下來。

    通過探索潛在代碼 y 并保持 z 從左到右固定重建圖像。

    半監(jiān)督式方法

    作為我們最后一個(gè)實(shí)驗(yàn),我們找到一種替代方法來獲得類似的消糾纏結(jié)果,在這種情況下,我們只有很少的標(biāo)簽信息樣本。我們可以修改之前的架構(gòu),使得 AAE 產(chǎn)生一個(gè)潛在的代碼,它由表示類別或標(biāo)簽(使用 Softmax)的向量 y 和連續(xù)的潛在變量 z(使用線性層)連接組成。由于我們希望向量 y 表現(xiàn)為一個(gè)獨(dú)熱向量,我們通過使用第二個(gè)帶有判別器 Dcat 的對(duì)抗網(wǎng)絡(luò)迫使其遵從分類分布。編碼器現(xiàn)在是 q(z,y|x)。解碼器使用類別標(biāo)簽和連續(xù)隱藏代碼重建圖像。

    半監(jiān)督式對(duì)抗自編碼器架構(gòu)。

    基于重建損失函數(shù)創(chuàng)建隱藏代碼和改進(jìn)無需標(biāo)簽信息的生成器和判別器網(wǎng)絡(luò),未標(biāo)記的數(shù)據(jù)通過這種方式改進(jìn)編碼器以促進(jìn)訓(xùn)練過程。

    用半監(jiān)督式方法得到消糾纏結(jié)果。

    值得注意的是,現(xiàn)在不僅可以通過較少標(biāo)簽信息生成圖像,還可以通過查看潛在代碼 y 并選擇具有最高價(jià)值的圖像來分類我們沒有標(biāo)簽的圖像。通過目前的設(shè)置,使用 100 個(gè)標(biāo)簽樣本和 47000 個(gè)未標(biāo)記的樣本,分類誤差約為 3%。

    關(guān)于 GPU 訓(xùn)練

    最后,我們將在 Paperspace 平臺(tái)上為兩個(gè)不同 GPU 和 CPU 中的最后一個(gè)算法做一個(gè)訓(xùn)練時(shí)間方面的簡(jiǎn)短比較。即使這種架構(gòu)不是很復(fù)雜,而且由很少的線性層組成,但是在使用 GPU 加速時(shí),訓(xùn)練時(shí)間的改善是巨大的。經(jīng)過 500 epoch 的訓(xùn)練時(shí)間,從 CPU 的近 4 小時(shí)降至使用 Nvidia Quadro M4000 的 9 分鐘,使用 Nvidia Quadro P5000 進(jìn)一步下降到 6 分鐘。

    有無 GPU 加速的訓(xùn)練時(shí)間對(duì)比

    更多資料

    • What is a variational autoencoder (https://jaan.io/what-is-variational-autoencoder-vae-tutorial) (Tutorial)

    • Auto-encoding Variational Bayes (https://arxiv.org/abs/1312.6114) (original paper)

    • Adversarial Autoencoders (https://arxiv.org/abs/1511.05644) (original paper)

    • Building Machines that Imagine and Reason: Principles and Applications of Deep Generative Models (http://videolectures.net/deeplearning2016_mohamed_generative_models/) (Video Lecture)

網(wǎng)站首頁(yè)   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有