本文章主要为了复现这个MMD教程中的代码。
pytorch环境安装
下面参考pytorch的官方教程。
这是安装pytorch的先决条件,如果需要用到GPU加速的话还需要下载CUDA驱动。(不过这个小项目就不用啦)
首先需要一个Anaconda做为package manager,为项目建立虚拟环境(因为不同项目对pytorch或者其他包的版本要求不同,不能兼容哦)。
之后要下载项目所需要的pytorch版本。如果项目中有说明具体的pytorch版本,最好下载对应的版本,会省很多问题。在这个MMD项目中没有明确说明版本,那么我们就选择pytorch1.1.0这个版本吧(1.1、1.2、1.4、1.5这几个版本的区别不太清楚,但是小版本改动不大。0.4的版本相比1.x的版本差别会大很多。1.6是最新的版本,一般新版本不太稳定不建议使用)。
然后点击跳转到先前版本
选择Windows->CPU only的命令行,复制下来,你可以直接在终端进入虚拟环境安装,也可以在后面打开VSCode,进项目再安装。(记得打开VPN哦,不然下载速度会很慢)
建立MMD项目
好的文件管理可以让你的电脑更加有序,不然项目一多就乱套了。(或者说我有整理洁癖也行哈哈哈哈)目录最好不要用中文,不然有些项目可能会出现乱七八糟的报错,还要改很长时间。打开一个盘建立一个pythonProjects文件夹,以后专门用来放python的项目,然后再创建一个MMD_test文件夹,用来放本次MMD项目的代码。
然后打开VSCode,可能会自动打开上次的项目,那么我们需要点击最上方“文件->新建窗口”,然后选择打开文件夹,选中之前创建的MMD_test。之后在最上方选择“终端->新终端”,在VSCode中打开一个终端,用conda activate 激活到目标虚拟环境中。
现在我们来粗略看一下MMD教程中的代码吧。
- 第一段代码
定义了两个函数,具体下面都有说明,看起来像是为之后的测试提供封装好的函数工具,那么我们就新建一个.py文件,把这段代码复制进去,命名为mmd_tool.py。
import torch
def guassian_kernel(source, target, kernel_mul=2.0, kernel_num=5, fix_sigma=None):
'''
将源域数据和目标域数据转化为核矩阵,即上文中的K
Params:
source: 源域数据(n * len(x))
target: 目标域数据(m * len(y))
kernel_mul:
kernel_num: 取不同高斯核的数量
fix_sigma: 不同高斯核的sigma值
Return:
sum(kernel_val): 多个核矩阵之和
'''
n_samples = int(source.size()[0])+int(target.size()[0])# 求矩阵的行数,一般source和target的尺度是一样的,这样便于计算
total = torch.cat([source, target], dim=0)#将source,target按列方向合并
#将total复制(n+m)份
total0 = total.unsqueeze(0).expand(int(total.size(0)), int(total.size(0)), int(total.size(