学习笔记|Pytorch使用教程30(PyTorch常见报错 )

学习笔记|Pytorch使用教程30

本学习笔记主要摘自“深度之眼”,做一个总结,方便查阅。
使用Pytorch版本为1.2

  • PyTorch常见报错
  • PyTorch框架训练营课程总结

一.PyTorch常见报错

共同贡献PyTorch常见错误与坑汇总文档:
《PyTorch常 见报错/坑汇总》
在这里插入图片描述

1.报错: ValueError: num_samples should be a positive integer value, but got num_samples=0

可能的原因:

  • 传入的Dataset中的len(self.data_ info)= =0,即传入该dataloader的dataset里没有数据

解决方法:

  • 检查dataset中的路径
  • 检查Dataset的len__.()函数为何输出为零

测试代码:

import os
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
import torchvision.models as models
from torch.utils.data import DataLoader
from tools.my_dataset import RMBDataset
from torch.utils.data import Dataset
from model.lenet import LeNet
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# ========================== 1 num_samples=0
# flag = 0
flag = 1
if flag:
    train_dir = os.path.join("..", "data", "rmb_split", "train")
    # train_dir = os.path.join("..", "..", "data", "rmb_split", "train")
    train_data = RMBDataset(data_dir=train_dir)

    # 构建DataLoder
    train_loader = DataLoader(dataset=train_data, batch_size=16, shuffle=True)

输出:

Traceback (most recent call last):
  File "common_errors.py", line 32, in <module>
    train_loader = DataLoader(dataset=train_data, batch_size=16, shuffle=True)
  File "/home/omnisky/anaconda3/envs/pytorch/lib/python3.7/site-packages/torch/utils/data/dataloader.py", line 213, in __init__
    sampler = RandomSampler(dataset)
  File "/home/omnisky/anaconda3/envs/pytorch/lib/python3.7/site-packages/torch/utils/data/sampler.py", line 94, in __init__
    "value, but got num_samples={}".format(self.num_samples))
ValueError: num_samples should be a positive integer value, but got num_samples=0

这是路径错误,设置train_dir = os.path.join("..", "..", "data", "rmb_split", "train")

2.报错: TypeError: pic should be PIL Image or ndarray. Got <class
'torch.Tensor >
可能的原因:

  • 当前操作需要PIL Image或ndarray数据类型,但传入了Tensor

解决方法:

  • 检查transform中是否存在两次ToTensor()方法
  • 检查transform中每一一个操作的数据类型变化

测试代码:

# ========================== 2
# TypeError: pic should be PIL Image or ndarray. Got <class 'torch.Tensor'>
# flag = 0
flag = 1
if flag:
    train_transform = transforms.Compose([
        transforms.Resize((224, 224)),

        transforms.FiveCrop(200),
        transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

        transforms.ToTensor(),
        # transforms.ToTensor(),
    ])

    train_dir = os.path.join("..", "..", "data", "rmb_split", "train")
    train_data = RMBDataset(data_dir=train_dir, transform=train_transform)
    train_loader = DataLoader(dataset=train_data, batch_size=16, shuffle=True)

    data, label = next(iter(train_loader))

输出:

Traceback (most recent call last
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值