近年來生成對抗網路在各大頂會上大放異彩,但是大多研究集中在影象方面,衍生出一系列dcgan、wgan等等模型,最近我在關於手語識別的研究中遇到資料量及資料種類過少的問題,故想到使用gan來生成手語資料,達到以假亂真的效果。除了這個方面外,gan在這些訊號的生成的研究對於醫療方面受損訊號的恢復、意圖生成特定的屬性的訊號方面也具有重要的意義。
決定使用gan後可以先看這個領域的近幾年的綜述文獻。重點關注前人總結的哪些模型適用於那些應用場景,然後針對主流模型,尋找相關**、部落格、github等進行了解
需要了解的部分首先是演算法原理,如果時間寬裕,最好掌握詳盡的數學推導,這大大有助於**理解和修改工作。這也是為什麼要先研究主流模型的原因:相關資料較多。
去github找相關原始碼進行**復現工作。期間會遇到很多很多bug,不要怕,根據你掌握的原理進行修改,這一階段也是你的工程能力大大提公升的階段。
大致掌握**後,改用自己的資料集、針對自己的資料嘗試修改模型,當前目標是跑通網路。
在調參,修改bug的過程中,可以將自己遇到的bug及解決方法記錄下來,總結經驗,這有助於工程能力進一步提高。也可以在該專案完成後進行總結,但是效果肯定沒有前者好。
首先對gan的雛形進行簡要介紹。
眾所周知:gan是一種無監督學習方法。有兩個網路分別是生成器(g)和判別器(d),二者是乙個不斷博弈達到平衡的過程,對於不同的任務目標,不一定要分為訓練集和測試集。本次我的任務就是單純的生成手語資料,故在該專案中我沒有進行分割。
原始的gan的優化目標函式為:
min g
maxdv
(d,g
)=ex
∼p
data (x
)[
logd(
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)))]
gmind
maxv(
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
ge
[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等資源檔案...