作者:机器视觉全栈er
网站:cvtutorials.com
序列化是将某个对象的信息转化成可以存储或者传输的信息的过程,反序列化是和序列化相反的过程。
torch.save: 序列化的用法如下:
torch.save(obj, f, pickle_module=pickle, pickle_protocol=DEFAULT_PROTOCOL, _use_new_zipfile_serialization=True)
举个简单的例子:
>>> import torch
>>> cvtutorials = torch.randn([2, 3])
>>> cvtutorials
tensor([[-1.8449, 1.7814, -0.5579],
[-0.5615, -0.2925, -0.0764]])
>>> torch.save(cvtutorials, "cvtutorials.pt")
torch.load: 反序列化的用法如下:
torch.load(f, map_location=None, pickle_module=pickle, **pickle_load_args)
举个简单的例子:
>>> cvtutorials_1 = torch.load("cvtutorials.pt", map_location=torch.device("cpu"))
>>> cvtutorials_1
tensor([[-1.8449, 1.7814, -0.5579],
[-0.5615, -0.2925, -0.0764]])
>>> cvtutorials_1.is_cuda
False
这里要注意,上面的函数将所有的tensor放到cpu上的,如果要特别指定放到GPU上,需要设置为GPU,举例如下:
>>> cvtutorials_2 = torch.load("cvtutorials.pt", map_location=lambda storage, loc: storage.cuda(1))
>>> cvtutorials_2
tensor([[-1.8449, 1.7814, -0.5579],
[-0.5615, -0.2925, -0.0764]], device='cuda:1')
>>> cvtutorials_2.is_cuda
True
我将tensor载入到GPU上时,速度明显变慢了,有一个从CPU迁移到GPU的过程。