WGAN GP應用於一維時序訊號

2021-09-19 11:33:52 字數 2814 閱讀 5550

近年來生成對抗網路在各大頂會上大放異彩,但是大多研究集中在影象方面,衍生出一系列dcgan、wgan等等模型,最近我在關於手語識別的研究中遇到資料量及資料種類過少的問題,故想到使用gan來生成手語資料,達到以假亂真的效果。除了這個方面外,gan在這些訊號的生成的研究對於醫療方面受損訊號的恢復、意圖生成特定的屬性的訊號方面也具有重要的意義。

決定使用gan後可以先看這個領域的近幾年的綜述文獻。重點關注前人總結的哪些模型適用於那些應用場景,然後針對主流模型,尋找相關**、部落格、github等進行了解

需要了解的部分首先是演算法原理,如果時間寬裕,最好掌握詳盡的數學推導,這大大有助於**理解和修改工作。這也是為什麼要先研究主流模型的原因:相關資料較多。

去github找相關原始碼進行**復現工作。期間會遇到很多很多bug,不要怕,根據你掌握的原理進行修改,這一階段也是你的工程能力大大提公升的階段。

大致掌握**後,改用自己的資料集、針對自己的資料嘗試修改模型,當前目標是跑通網路。

在調參,修改bug的過程中,可以將自己遇到的bug及解決方法記錄下來,總結經驗,這有助於工程能力進一步提高。也可以在該專案完成後進行總結,但是效果肯定沒有前者好。

首先對gan的雛形進行簡要介紹。

眾所周知:gan是一種無監督學習方法。有兩個網路分別是生成器(g)和判別器(d),二者是乙個不斷博弈達到平衡的過程,對於不同的任務目標,不一定要分為訓練集和測試集。本次我的任務就是單純的生成手語資料,故在該專案中我沒有進行分割。

原始的gan的優化目標函式為:

min ⁡g

max⁡dv

(d,g

)=ex

∼p

data (x

)[

log⁡d(

x)]+

ez∼p

z(z)

[log⁡(

1−d(

g(z)

))

]\min _ \max _ v(d, g)=\mathbb_ \sim p_}(\boldsymbol)}[\log d(\boldsymbol)]+\mathbb_ \sim p_}(\boldsymbol)}[\log (1-d(g(\boldsymbol)))]

gmin​d

max​v(

d,g)

=ex∼

pdata ​(

x)​[

logd(x

)]+e

z∼pz

​(z)

​[log(1−

d(g(

z)))

]為了改進gan的一些不穩定、模式崩潰等缺點,提出的wgan能有效解決上述問題。

wgan主要改進如下:

1、使用wasserstein距離代替js散度,有效的解決了當生成資料和原始資料不重疊的問題。

2、判別器d最後一層去掉sigmoid,這一點是理所應當的,我要生成的手語訊號肯定不是【0,1】之間的數

3、g和d的loss不取log

4、新增了懲罰項,每次更新 d 的引數之後,將其絕對值截斷到不超過乙個固定常數 c ,即gradient clipping

關於這一改進的優勢,有很多較好的博文給出了解釋,在這裡僅作簡要介紹,想要了解的同學可以參考:鄭華濱老師在知乎上的分析

然而上述的wgan實際應用中也是由效果不好的時候、所以我們今天的主角wgan-gp就登場了!!

wgan-gp主要針對上述第四點的懲罰項進行改進,改進之後的目標函式是:

l =e

x~∼p

g[d(

x~)]

−ex∼

pr[d

(x)]

+λex

^∼pα

^[(∥

∇x^d

(x^)

∥2−1

)2

]l=\underset} \sim \mathbb_}}[d(\tilde})]-\underset \sim \mathbb_}}[d(\boldsymbol)]+\lambda \underset} \sim \mathbb_}}}\left[\left(\left\|\nabla_}} d(\hat})\right\|_-1\right)^\right]

l=x~∼p

g​e​

[d(x

~)]−

x∼pr

​e​[

d(x)

]+λx

^∼pα

^​e​

[(∥∇

x^​d

(x^)

∥2​−

1)2]

我們生成的手語訊號是一維時序訊號,具有較強的時間相關性。長度是160,單種手語樣本數是300,共80種手語。

dim =

64#模型深度,該引數僅在除錯模型時使用,除錯更方便

batch_size =

64#每次輸入batch的大小

critic_iters =

5#生成器迭代5次,判別器迭代1次,這是wgan**中提出的技巧

lambda =

10#懲罰項係數λ的預設值

epoch =

10000

#迭代次數

output_dim =

160#輸出資料的長度

1、生成器和判別器是基本對稱相反的

2、生成其中使用了一維反卷積(nn.convtransoise1d)、batchnorm1d和leakyrelu啟用函式

判別器種使用了一維卷積(nn.conv1d)及leakyrelu函式,沒有batchnorm層(據說不可以加)

4、優化器使用的是adam

3、很多人反映loss會出現nan的情況,這種情況可以調節優化器、反向傳播等等

signalr 應用於微信小程式(一)

先安裝signalr 1.安裝singalr,用nutget就行,用這個包管理就行。2.使用singalr 3.根據singalr的呼叫模式來開發singalr的客戶端。安裝singalr,非core,後面我們會介紹core的。我用的是2.23,那麼開始上 了 引用 using microsoft....

tensorflow增強學習應用於乙個小遊戲

首先需要安裝gym模組,提供遊戲的。1,所需模組 import tensorflow as tf import numpy as np import gymimport random from collections import deque from keras.utils.np utils im...

編寫乙個應用於mpa場景下的webpack外掛程式

在構建一些可擴充套件性可配置性更高的多頁應用時,我們需要用html webpack plugin去靈活的將自己頁面元件的js插入對應的模版。webpack的並沒有提供這樣的外掛程式。webpack提供一些生命週期可以被呼叫,所以我們可以編寫外掛程式來攔截最後生成的html,控制js css等資源檔案...