一、上周工作
整理代码、设计损失函数并实验、安装LaTeX
二、本周计划
跑实验(未完成)、机器学习、看师兄论文
三、完成情况
3.1 学习师兄师姐的论文框架,看闵老师的论文写作系列
写摘要部分
3.2 机器学习:
神经网络以及构建、前向传播、矩阵乘法
3.3 跑实验
工作站没有空下来。刚刚才开始跑CurveVelA数据集,数据量24000,Epochs240
之后打算去了解服务器,尝试将项目搭载到服务器上去跑,目前准备使用kaggle。
3.4 学习中也有一些新的idea:
1)边缘检测并引入损失函数中
2)在模型的损失函数中引入注意力权重
四、存在的主要问题
1.RuntimeError: Expected all tensors to be on the same device, but found at least two devices
——lpips时出现某些数据在cpu加载,某些在gpu加载。在调试模式下使用.is_cuda属性去查看哪些是在GPU上,哪些是在CPU上,然后统一放在GPU上。
2.转成tensor有几种方法,有些就会报错,他们的区别如下:
主要有以下四种方法:
torch.Tensor()
torch.tensor()
torch.as_tensor()
torch.from_numpy()
区别:Pytorch中创建Tensor的几种方式详解_pytorch 新建tensor-CSDN博客
3.only one element tensors can be converted to Python scalars
——item()
方法可以将只有一个元素的张量转换为Python标量。但是,如果张量中有多个元素或者是一个空的张量,那么调用item()
方法会抛出以上错误。 而训练时是一批一批进行训练的,lpips中有多个元素。使用for循环解决。
4.刚刚在工作站跑代码的时候,发现每个epoch的训练时间比最初慢了3min。
——在网络结构只增加一层cbam,且修改了损失函数后,自己猜想应该也不会慢3min。然后开始对比实验进行测试,最后发现是加载lpips模型的问题。因为把加载lpips模型语句放入了循环中(for...in enumerate() 会调用DataLoader类的__iter__
方法,将一个batch的数据以数组的形式返回。)
lpips_model = lpips.LPIPS(net="alex", verbose=False)
将加载语句放在循环外,每个epoch训练时间缩短了2min左右。
五、下一步计划
尝试使用kaggle跑实验,目前了解到的缺点是运行自己的项目会存在参数难以修改的问题,需在本地改。
写论文初稿