作者代码实现了DANN中MNIST->MNIST-M的转换。
实验环境要求:
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
论文中关于这个网络结构,图形表示如下:
代码中对特征提取器,域分类器,类分类器分别定义一个类。
特征提取器(绿色部分),经过两次卷积,两次池化,结果如下:
域分类器经过两个全连接层。
第一个全连接层输入为48*4*4=768,输出为100,第二个全连接层输入为100,输出为2。
Pytorch中的损失函数:
CrossEntropyLoss()=log_softmax() + NLLLoss()
log_softmax() :先做softmax,后做log
NLLLoss(negative log likelihood loss):最大似然 / log似然代价函数, 输入 是一个对数概率向量和一个目标标签,对数概率向量可以是log_softmax()的输出。
有一篇博客以举例子并验证的方式形象化的解释了这个结果,博客链接如下:
Pytorch中的变量(Variable)
pytorch中的变量有三个属性,分别是data表示变量中的具体值, grad表示这个变量反向传播的梯度, grad_fn表示是通过什么操作得到这个变量的例如( 加减乘除、卷积、反置卷积)。
https://blog.csdn.net/qq_41776781/article/details/93967961
关于变量的介绍,参考的是上面的博客