python语法报错日志(更新中)

python高级语法
待拆分类别:

  1. 类的使用
  2. 内存的使用
  3. 简易语法的使用

  1. 三元表达式在else处使用pass或者continue
    报错:Syntax Error
    https://cloud.tencent.com/developer/ask/187566
    总之,
    想写:x=A if condition==True else pass
    不如:if condition==True: x=A
  2. 使用torch基于npy创建自己的数据集
    报错:TypeError: object.__new__() takes exactly one argument (the type to instantiate)
    原来代码是:
class Mydata(Data.Dataset):
    def __init_(self,xpath,ypath):
        self.x = np.load(xpath)
        self.y = np.load(ypath)

应该改为:

class MyDataset(Dataset):
    def __init__(self,xdata,ydata):
        self.xdata = np.load(xdata) 
        self.ydata = np.load(ydata)

注意,传入的参数a应该使用self.a定义。

  1. dataloader载入数据集时报错:
    TypeError: 'module' object is not callable
    原来是:
import torch.utils.data as Data
train_loader = Data.dataloader(略)

改为:

from torch.utils.data import DataLoader, Dataset
train_loader = DataLoader(略)

错误同此link

  1. 数据类型错误
    input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the same
    https://blog.csdn.net/weixin_38314865/article/details/103130389
    目前:
def transform(x):
    x = x.transpose(0,2,1)
    return torch.from_numpy(x).type(torch.FloatTensor)
def target_transform(y):
    return torch.from_numpy(y)[:,0].type(torch.int64)

x为FloatTensor,label为torch.int64。

  1. cuda out of memory
  • 可能情况1:之前占用的内存空间没有释放。
    解决:
    • 查看占用内存空间的进程号。
      nvidia-smi
    • 杀死进程。
      kill 进程号
  • 可能情况2: torch 版本和cuda版本不匹配
  • 可能情况3: 变量太多爆炸了
    • 解决方式1:释放不需要的变量(torch可以自己检测出哪些不需要,只需要加上以下语句即可。)
      torch.cuda.empty_cache()
    • 解决方式2:测试时爆炸了用网络测试时,依然在计算梯度。需要在不需要计算梯度的地方加上:
      with torch.no_grad():
  1. “non-default argument follows default argument”
    报这个错是因为:把含有默认值的参数放在了不含默认值的参数的前面。
    解决:调整位置即可。
    link
  2. 忽视warning
import warnings
warnings.filterwarnings("ignore")
  1. load big npy file, but crashed in colab after using all RAM. 【link】
    try:
    np.load('filename.npy',mmap_mode='c')

conclusion: load it with a mmap_mode='c' if you want to be able to modify data in memory but not on dis, or 'r+ if you want to modify data both in memory and on disk.

  1. conda env create -f environment.yml安装别人的环境时报错【ResolvePackageNotFound】
    https://blog.csdn.net/langjijianghu_123/article/details/80923293
    原因:conda里面没有存储这些库的下载地址。
    解决方法:
    将这些报错的库在environment.yml里注释掉。然后安装完环境后在环境里用pip下载。
  2. from utils import utilities, file_analysis as fa, plotter
    注意断句。
    等同于:
from utils import utilities
from utils import file_analysis as fa
from utils import plotter

你可能感兴趣的:(python语法报错日志(更新中))