代码阅读笔记

作者代码实现了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()的输出。


log似然代价函数的计算公式

有一篇博客以举例子并验证的方式形象化的解释了这个结果,博客链接如下:

https://blog.csdn.net/qq_22210253/article/details/85229988

Pytorch中的变量(Variable)

pytorch中的变量有三个属性,分别是data表示变量中的具体值, grad表示这个变量反向传播的梯度, grad_fn表示是通过什么操作得到这个变量的例如( 加减乘除、卷积、反置卷积)。

https://blog.csdn.net/qq_41776781/article/details/93967961

关于变量的介绍,参考的是上面的博客


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容