作者代碼實(shí)現(xiàn)了DANN中MNIST->MNIST-M的轉(zhuǎn)換。
實(shí)驗(yàn)環(huán)境要求:
scipy>=1.1.0
numpy>=1.14.3
matplotlib>=2.1.0
torch>=0.4.1
Pillow>=5.1.0
scikit_learn>=0.19.2
torchvision>=0.2.1
論文中關(guān)于這個(gè)網(wǎng)絡(luò)結(jié)構(gòu),圖形表示如下:

代碼中對(duì)特征提取器,域分類器,類分類器分別定義一個(gè)類。
特征提取器(綠色部分),經(jīng)過兩次卷積,兩次池化,結(jié)果如下:

域分類器經(jīng)過兩個(gè)全連接層。

第一個(gè)全連接層輸入為48*4*4=768,輸出為100,第二個(gè)全連接層輸入為100,輸出為2。
Pytorch中的損失函數(shù):
CrossEntropyLoss()=log_softmax() + NLLLoss()
log_softmax() :先做softmax,后做log

NLLLoss(negative log likelihood loss):最大似然 / log似然代價(jià)函數(shù), 輸入 是一個(gè)對(duì)數(shù)概率向量和一個(gè)目標(biāo)標(biāo)簽,對(duì)數(shù)概率向量可以是log_softmax()的輸出。

有一篇博客以舉例子并驗(yàn)證的方式形象化的解釋了這個(gè)結(jié)果,博客鏈接如下:
Pytorch中的變量(Variable)
pytorch中的變量有三個(gè)屬性,分別是data表示變量中的具體值, grad表示這個(gè)變量反向傳播的梯度, grad_fn表示是通過什么操作得到這個(gè)變量的例如( 加減乘除、卷積、反置卷積)。
https://blog.csdn.net/qq_41776781/article/details/93967961
關(guān)于變量的介紹,參考的是上面的博客