解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)

简介: 解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)

@TOC

问题1:pytorch下,对多维tensor进行缩放

问题原因:有的时候想要把得到图像的尺寸过大过小,想要对生成的tensor张量进行缩放,同时要保持原有图像等比例。如现在有一个tensor,他的大小是:[64,3,256,256],64代表batch size,3表示通道数,256代表长和宽,想要将其缩小为32*32的尺寸。

解决方案:我们可以使用transform.resize(),但在试过后,发现使用torch.nn.functional.interpolate会更好用

首先说明其参数:torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None)

  1. input是我们的输入张量(Tensor)
  2. size是输出大小
  3. scale_factor (float or Tuple[float]) 指定输出为输入的多少倍数
  4. mode是上采样算法的选择:有’nearest’, ‘linear’, ‘bilinear’, ‘bicubic’ , ‘trilinear’和’area’,其中默认是’nearest’
  5. align_corners (bool, optional) 如果设置为True,则输入和输出张量由其角像素的中心点对齐,从而保留角像素处的值。如果设置为False,则输入和输出张量由它们的角像素的角点对齐,插值使用边界外值的边值填充
    使用样例:
print(train_mask.size())
# train_mask尺寸本来是[64,3,256,256]
train_mask = torch.nn.functional.interpolate(train_mask, scale_factor=1 / 4, mode='bilinear',align_corners=False)
#变换之后,train_mask尺寸变为[64,3,64,64]
print(train_mask.size())

问题2:'PIL.Image' has no attribute '****'

问题原因:这个是因为系统已经安装的PIL太新了,有些属性在新版中已经被弃用

解决方案:改回原来的版本就可以:pip install pillow==4.1.1,安装老版本pillow,最后会告诉你这个版本已经过时了,不用管。

问题3:ImportError: cannot import name 'imread'

问题原因:“scipy”库的版本过高

解决方案:改回原来的版本:pip install scipy==1.2.1

问题4:models/bird/netG.pth is a zip archive (did you mean to use torch.jit.load()?)

问题原因:原来训练后保存参数时所在的pytorch环境和现在加载参数的pytorch环境可能不同,版本不一致,导致当时保存的参数现在读不出来。

解决方案:先在1.x版本下加载模型,然后在保存为非zip格式的,即设置use_new_zipfile_serialization=False 就行了。

#torch_version==1.x
import torch
from models import net
checkpoint = 'xxx.pth'
model = net()
model.load_state_dict(torch.load(checkpoint))
model.eval()
torch.save(model.state_dict(), model_path, use_new_zipfile_serialization=False)

问题5:模型的保存与加载

问题描述:在实际运行当中,要注意每100轮epoch或者每50轮epoch要保存训练好的参数,以防不测(断电、断连、硬件故障、地震火灾等),这样下次可以直接加载该轮epoch的参数接着训练,就不用重头开始。

解决方案:

参数的保存:

torch.save(model.state_dict(), path)

参数的加载

model.load_state_dict(torch.load(path))

问题6:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 226: illegal multibyte sequence

问题原因:某个文件是gbk编码,其无法被解码。

解决方案:看看是不是自己在yml文件或者其他文件中写了中文(如在下图中 不小心在注释写了中文,导致解码失败),删除就好了

请添加图片描述

目录
打赏
0
0
0
0
11
分享
相关文章
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
SPDL是Meta AI推出的开源高性能AI模型数据加载解决方案,基于多线程技术和异步事件循环,提供高吞吐量、低资源占用的数据加载功能,支持分布式系统和主流AI框架PyTorch。
107 10
SPDL:Meta AI 推出的开源高性能AI模型数据加载解决方案,兼容主流 AI 框架 PyTorch
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
2322 0
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
本文介绍了PyTorch中利用多GPU进行深度学习的三种策略:数据并行、模型并行和两者结合。通过`DataParallel`实现数据拆分、模型不拆分,将数据批次在不同GPU上处理;数据不拆分、模型拆分则将模型组件分配到不同GPU,适用于复杂模型;数据和模型都拆分,适合大型模型,使用`DistributedDataParallel`结合`torch.distributed`进行分布式训练。代码示例展示了如何在实践中应用这些策略。
2196 2
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
【Deep Learning A情感文本分类实战】2023 Pytorch+Bert、Roberta+TextCNN、BiLstm、Lstm等实现IMDB情感文本分类完整项目(项目已开源)
亮点:代码开源+结构清晰+准确率高+保姆级解析 🍊本项目使用Pytorch框架,使用上游语言模型+下游网络模型的结构实现IMDB情感分析 🍊语言模型可选择Bert、Roberta 🍊神经网络模型可选择BiLstm、LSTM、TextCNN、Rnn、Gru、Fnn共6种 🍊语言模型和网络模型扩展性较好,方便读者自己对模型进行修改
713 0
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!
AttributeError: module ‘distutils‘ has no attribute ‘version‘解决跑pytorch代码报错
AttributeError: module ‘distutils‘ has no attribute ‘version‘解决跑pytorch代码报错
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等