zoukankan      html  css  js  c++  java
  • pytorch使用过程问题汇总

    1.DecompressionBombWarning: Image size (92680344 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack.DecompressionBombWarning,

      日期 : 2021-01-27

      原因是图像尺寸超过PLI 默认读取图像尺寸。

      一种方法是更改阈值上限 参考

    from PIL import Image
    Image.MAX_IMAGE_PIXELS = 2300000000 # 更改阈值像素上限

      第二种方法,使用其它的库,读入之后,缩放再给PIL使用。

    2.列表保存生成的特征数据时,显存溢出

      问题代码

        for data in enumerate(testLoader): # 这边返回的是(执行次数,__getitem__返回数据) 。 Loader的batch_size= 1
            print(data[0])
            classNO = data[1][1]
            testImage= data[1][0]
            filePath =data[1][2]
            testEncode = model.encode(testImage.cuda())
            featureList.append((testEncode,classNO ,filePath))

        大概运行25次,显存溢出。 用的是ResNet152做迁移学习。显存是8G ,之前训练网络的时候,批次=25,显存就会溢出。对照,显然每次加载一幅图像生成特征值后,该次的网络占用没有释放。猜测虽然是eval ,但是每次运行后将testEncode 存储。系统检测到数据没释放,对应生成特征的网络过程也没释放。

      解决办法如下

     testEncode = model.encode(testImage.cuda()).detach().cpu()   # 调用detach之后,存储新建副本,与网络无关。

     3. 加载预训练模型并删除指定数据

      加载预训练模型的时候,会碰到预训练模型类别数目和实际类别不一致。 网上搜索,有如下方法

          1)创建模型时,设置类别数目和预训练模型一致,赋值完毕后,再更改输出头

            checkpoint = torch.load(config.PREMODELPATH, map_location='cpu')
            #输出的层名称
            classifiers = "head"
            msg = model.load_state_dict(checkpoint['model'], strict=False)
    model.head = 新建输出头

      此处,给出参考“timm”的代码。先删除预训练模型的头,然后直接赋值。

     checkpoint = torch.load(config.PREMODELPATH, map_location='cpu')
            #输出的层名称
            classifiers = "head"
            if classifiers is not None:
                if isinstance(classifiers, str):
                    classifiers = (classifiers,)
                #类数目不一致,则删除输出层
                if config.MODEL.NUM_CLASSES != 1000:
                    for classifier_name in classifiers:
                        # completely discard fully connected if model num_classes doesn't match pretrained weights
                        del checkpoint["model"][classifier_name + '.weight']
                        del checkpoint["model"][classifier_name + '.bias']

      原来预训

      

  • 相关阅读:
    团队冲刺第四天
    团队冲刺第三天
    团队冲刺第二天
    冲刺(六)
    冲刺(五)
    冲刺(四)
    冲刺(三)
    冲刺(二)
    冲刺(一 )
    第一阶段SCRUM
  • 原文地址:https://www.cnblogs.com/PiaoLingJiLu/p/14335184.html
Copyright © 2011-2022 走看看