_tkinter.TclError: unknown color name "white"
经过排查是plt.subplots()这个函数运行时出错,经百度得到解决办法py文件开始时加上下面两行
import matplotlib
matplotlib.use('Agg')
参考_tkinter.TclError: no display name and no $DISPLAY environment variable报错解决方案
改pytorch遇到的某些问题--20240322更新
在改动了些代码后精度一直不变且效果很差,
调试过程中发现是因为使用了pytorch张量赋值给另一个变量,该赋值是引用赋值,改变这个变量原值应该不变的量同样跟着变化,导致出现问题。
总结:定义一个新张量时不要直接赋值(引用赋值),使用torch.tensor(原tensor变量)语句将引用引到新张量上
报了警告UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor). 可能用这些方法更好 原tensor变量.clone().detach()
pytorch小记--20240413更新
训练完模型后测试时发现加eval()和不加eval()时效果差很多
因为在训练的过程中加入测试可以显示在训练过程中模型的实际效果,但是我测试时没有加入model.eval()方法导致模型中的BN层会将测试数据同样记录下来,所以没意识到这个问题之前所有跑的测试效果都不对,因为模型记录了测试数据的信息。
eval模式还和dropout层有关,但我测试的模型没有这一层暂时没看相关内容。
ps:加了eval测试会变得更快
在测试时可以加入 with torch.no_grad():不计算梯度
上面将想表达的意思随便写一下,有时间的话再好好总结一下。
记录总结一下pytorch在全局下指定gpu显卡的方式
1 终端命令模式(还没试过)
CUDA_VISIBLE_DEVICES=1 python main.py
2 代码设置
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '1'(有时候好像没有用,可能是要在import torch前使用)
或
with torch.cuda.device(1):
pass(没试过)
或
device = torch.device("cuda:7") 如果想只对单个变量加到gpu就是 变量.to(device)
torch.cuda.set_device(device)
ps:torch.nn.DataParallel(model,device_ids=[7]) 多卡运行 要单独设置
指定完gpu后无论是 .CUDA() 还是 .to(cuda) 应该都是只占用指定gpu的
如果指定了gpu发现还有占用其他gpu的情况可能是:
torch.load("参数文件")时将模型参数加载到gpu:0下 模型加载该参数时再从此卡复制到指定gpu但是原参数不会被删除,所以加上参数map_location='cpu'(强迫症参考,或者条理更清晰)
即 torch.load("文件",map_location='cpu')