一、gpu切换到cpu来训练
要在CPU上训练模型,以下是一些可能需要修改的地方:
1. 模型加载到CPU:(train.py)
2. 数据加载到CPU:
在使用DataLoader时,通常不需要特别修改,因为它会自动处理数据加载到当前设备(CPU或GPU)。
1.修该train文件添加设备1:
2.确保你将 device 作为参数传递给 train_one_epoch 函数(以及任何其他需要知道运行设备的函数)
在 model.py 中修改 train_one_epoch 函数的定义,,添加device
最后,在 model.py 中的 train_one_epoch 函数里,使用 .to(device) 替换 .cuda():
3. 检查点和模型权重加载:
当从检查点加载模型状态字典或权重时,确保使用.cpu()。例如,如果有代码加载预训练权重到模型,确保它们被加载到CPU上,如下所示:
checkpoint = torch.load(resume_model, map_location=torch.device('cpu'))
model.load_state_dict(checkpoint['model_state_dict'])
4. 移除或修改CUDA相关的代码:
如果代码中有特定于CUDA的操作(如torch.cuda.empty_cache()),在CPU模式下注释掉
5. 环境变量设置:
移除或注释掉设置CUDA_VISIBLE_DEVICES的代码行,因为在使用CPU时不需要。
二、__init__.py的作用:
__init__.py 文件是 Python 包的一个特殊文件,它的存在告诉 Python 解释器这个目录应该被视为一个包,而不仅仅是一个普通的目录。这个文件可以为空,也可以包含 Python 代码,用于初始化包的状态。在你的情况下,datasets 包含 __init__.py 文件.和dataset.py 的目录。这意味着你可以在其他 Python 文件中使用dataset文件中的某类:from datasets.dataset import ....(类名),文件结构:
my_project/
datasets/
__init__.py
dataset.py
train.py
三、路径字符串的拼接问题
os.path.join()与os.listdir()使用的区别:
1.train.py
2.dataset.py
两种方法,都可以学习,看哪种方便
四、使用pdb来debug
import pdb
pdb.set_trace()
print("打印的a", a)