【发布时间】:2023-01-31 03:35:46
【问题描述】:
我使用 PyTorch 在 CIFAR-10 上运行 CNN 模型,并使用 the official PyTorch tutorial 保存一个通用检查点。
训练和测试完成后,我将最后一个纪元传递给这个 save_model 函数。
def save_model(epoch):
torch.save({
'epoch': epoch+1,
'model_state_dict': net.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
}, '/home/cc/research/AdderNet/pretrained/minionn.pt')
但是,我在尝试保存模型时不断收到以下错误:
> Train - Epoch 1, Batch: 1, Loss: 2.302385
> Test Avg. Loss: 0.020081, Accuracy: 0.269100
> Train - Epoch 2, Batch: 1, Loss: 2.019350
> Test Avg. Loss: 0.018918, Accuracy: 0.324800
> Traceback (most recent call last):
> File "/home/cc/research/AdderNet/main.py", line 119, in <module>
> main()
> File "/home/cc/research/AdderNet/main.py", line 115, in main
> save_model(epoch)
> File "/home/cc/research/AdderNet/main.py", line 105, in save_model
> torch.save({
> File "/home/cc/anaconda3/envs/torch/lib/python3.10/site-packages/torch/serialization.py", line 422, in save
> with _open_zipfile_writer(f) as opened_zipfile:
> File "/home/cc/anaconda3/envs/torch/lib/python3.10/site-packages/torch/serialization.py", line 309, in _open_zipfile_writer
> return container(name_or_buffer)
> File "/home/cc/anaconda3/envs/torch/lib/python3.10/site-packages/torch/serialization.py", line 287, in __init__
> super(_open_zipfile_writer_file, self).__init__(torch._C.PyTorchFileWriter(str(name)))
> **RuntimeError: File /home/cc/research/AdderNet/pretrained/minionn.pt cannot be opened.**
你认为问题是什么?请让我知道是否需要添加任何其他详细信息。我正在使用 VsCode 在远程服务器上运行我的代码。我也在使用我用 conda 创建的虚拟环境。 venv 中安装的 python 版本是Python 3.10.8,但 conda 的基本 python 版本是Python 3.9.13,我系统的默认 python 版本(当我停用 conda 时)是Python 3.8.10。操作系统也是Ubuntu20.04。
更新:
我可以使用以下方法保存模型:
torch.save(model, '/home/cc/research/AdderNet/pretrained/FILE_NAME')
但是由于我想加载并继续训练保存的模型,PyTorch 指示使用这种显然对我不起作用的方法:
torch.save({
'epoch': EPOCH,
'model_state_dict': net.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': LOSS,
}, '/home/cc/research/AdderNet/pretrained/FILE_NAME.pt')
【问题讨论】:
-
/home/cc/research/AdderNet/pretrained目录是否存在? -
路径有效。如果它存在,你是什么意思?不过,我没有任何名为
minionn.pt的文件。它不应该自己创建它吗? -
具体这个软件我不太了解,但总的来说,应该是目录本身已经存在了。所以我会重复我的问题:那个目录是否已经存在?
-
是的是的,该目录存在。
-
该目录是否可由正在执行该程序的任何用户写入?