首页 > 编程问答 >我不知道为什么在这种情况下我会收到“发生异常”

我不知道为什么在这种情况下我会收到“发生异常”

时间:2024-07-21 13:47:01浏览次数:6  
标签:python file-not-found

我正在尝试从 https://github.com/DDI-Dataset/DDI-Code 及其数据集运行代码(已下载并添加到作者指示的文件夹中),并且我收到消息“ 发生异常:异常请访问 https://stanfordaimi.azurewebsites.net/datasets/35866158-8196-48d8-87bf-50dca81df965 下载DDI数据集。 ”在 VScode 中使用 python 调试器时 下面是文件“ddi_dataset.py”中的代码。

"""Code for loading DDI Dataset."""

from torch.utils.data import Subset
from torchvision.datasets import ImageFolder
from torchvision import transforms as T
import os
import pandas as pd
import numpy as np

means = [0.485, 0.456, 0.406]
stds  = [0.229, 0.224, 0.225]
test_transform = T.Compose([
    lambda x: x.convert('RGB'),
    T.Resize(299),
    T.CenterCrop(299),
    T.ToTensor(),
    T.Normalize(mean=means, std=stds)
])

class DDI_Dataset(ImageFolder):
    _DDI_download_link = "https://stanfordaimi.azurewebsites.net/datasets/35866158-8196-48d8-87bf-50dca81df965"
    """DDI Dataset.

    Args:
        root     (str): Root directory of dataset.
        csv_path (str): Path to the metadata CSV file. Defaults to `{root}/ddi_metadata.csv`
        transform     : Function to transform and collate image input. (can use test_transform from this file) 
    """ 
   # root = 'C:\\Users\\User\\OneDrive\\desktop\\CSproject\\datasets\\DDI\\images'
    def __init__(self, root, csv_path=None, download=True, transform=None, *args, **kwargs):
        if csv_path is None:
            csv_path = os.path.join(root, "ddi_metadata.csv")
        if not os.path.exists(csv_path) and download:
            raise Exception(f"Please visit <{DDI_Dataset._DDI_download_link}> to download the DDI dataset.")
        assert os.path.exists(csv_path), f"Path not found <{csv_path}>."
        super(DDI_Dataset, self).__init__(root, *args, transform=transform, **kwargs)
        self.annotations = pd.read_csv(csv_path)
        m_key = 'malignant'
        if m_key not in self.annotations:
            self.annotations[m_key] = self.annotations['malignancy(malig=1)'].apply(lambda x: x==1)

    def __getitem__(self, index):
        img, target = super(DDI_Dataset, self).__getitem__(index)
        path = self.imgs[index][0]        
        annotation = dict(self.annotations[self.annotations.DDI_file==path.split("/")[-1]])
        target = int(annotation['malignant'].item()) # 1 if malignant, 0 if benign
        skin_tone = annotation['skin_tone'].item() # Fitzpatrick- 12, 34, or 56
        return path, img, target, skin_tone

    """Return a subset of the DDI dataset based on skin tones and malignancy of lesion.

    Args:
        skin_tone    (list of int): Which skin tones to include in the subset. Options are {12, 34, 56}.
        diagnosis    (list of str): Include malignant and/or benign images. Options are {"benign", "malignant"}
    """
    def subset(self, skin_tone=None, diagnosis=None):
        skin_tone = [12, 34, 56] if skin_tone is None else skin_tone
        diagnosis = ["benign", "malignant"] if diagnosis is None else diagnosis
        for si in skin_tone: 
            assert si in [12,34,56], f"{si} is not a valid skin tone"
        for di in diagnosis: 
            assert di in ["benign", "malignant"], f"{di} is not a valid diagnosis"
        indices = np.where(self.annotations['skin_tone'].isin(skin_tone) & \
                           self.annotations['malignant'].isin([di=="malignant" for di in diagnosis]))[0]
        return Subset(self, indices)

我认为问题是变量 root 不包含任何文件路径,所以我尝试向它添加绝对文件路径(标记上方, root = 'C:\\Users\\User\\OneDrive\\desktop\\CSproject\\datasets\\DDI\\data_dir\\images' ),但是,出现了同样的错误消息。 以下是该文件在我的计算机中的位置。

**ddi_dataset.py:** C:\Users\User\OneDrive\desktop\CSproject\dataset\DDI\ddi_dataset.py **images: ** C:\Users\User\OneDrive\desktop\CSproject\dataset\DDI\images ('images'是我放置 png.s 和 ddi_metadata.csv 的文件夹)

I'我希望知道问题发生的原因以及如何解决~谢谢你


代码出现问题是因为它在的“images”文件夹中找不到“ddi_metadata.csv”文件,而此文件是初始化 DDI_Dataset 类所必需的。

可以尝试以下几种解决方案:

  1. 确认“ddi_metadata.csv”文件存在于正确的位置: 该文件应该位于“images”文件夹内,即“C:\Users\User\OneDrive\desktop\CSproject\dataset\DDI\images\ddi_metadata.csv”。

  2. 在创建 DDI_Dataset 对象时,明确指定 csv_path 参数:

dataset = DDI_Dataset(root='C:\\Users\\User\\OneDrive\\desktop\\CSproject\\dataset\\DDI\\images', 
                      csv_path='C:\\Users\\User\\OneDrive\\desktop\\CSproject\\dataset\\DDI\\images\\ddi_metadata.csv') 
  1. 如果仍然遇到问题,请尝试将“ddi_metadata.csv”文件复制到与“ddi_dataset.py”文件相同的目录中, 然后在创建 DDI_Dataset 对象时,将 root 参数设置为该目录:
dataset = DDI_Dataset(root='C:\\Users\\User\\OneDrive\\desktop\\CSproject\\dataset\\DDI') 

如果以上方法都无法解决问题,请检查以下内容:

  • 确保已经下载了完整的 DDI 数据集,并且“ddi_metadata.csv”文件包含在内。
  • 检查“ddi_metadata.csv”文件的编码格式。如果编码格式不是 UTF-8,则可能会导致读取文件出现问题。 可以尝试使用文本编辑器打开该文件,并将其另存为 UTF-8 编码格式的文件。

通过以上步骤,应该能够解决“发生异常”的错误,并成功加载 DDI 数据集。

标签:python,file-not-found
From: 78774298

相关文章

  • 基于Java python《学生手册》 线上考试系统设计与实现【源码+文档+PPT】
    ......
  • 基于python的儿童慈善会管理系统设计与实现【源码+文档+ppt】
    ......
  • 用 python 抓取谷歌结果统计
    我想从谷歌获取关键字的估计结果数。我使用Python3.3并尝试使用BeautifulSoup和urllib.request完成此任务。到目前为止,这是我的简单代码defnumResults():try:page_google='''http://www.google.de/#output=search&sclient=psy-ab&q=pokerbonus&oq=pokerbonus&gs......
  • 【python】Python高阶函数--sorted函数的高阶用法解析与应用实战
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 超详细Python教程——异步任务和定时任务
    异步任务和定时任务在Web应用中,如果一个请求执行了耗时间的操作或者该请求的执行时间无法确定,而且对于用户来说只需要知道服务器接收了他的请求,并不需要马上得到请求的执行结果,这样的操作我们就应该对其进行异步化处理。如果说使用缓存是优化网站性能的第一要义,那么将耗时......
  • Python 中的模 (%) 运算符如何处理负数?
    %运算符在Python中到底是如何工作的,特别是在涉及负数时?例如,为什么-5%4求值为3,而不是-1?在Python中,模运算符(%)遵循以下规则:a%b=a-(b*floor(a/b))其中:a是被除数。......
  • 如何使用 python 更新设备孪生?
    我目前正在尝试使用python更新设备孪生中的属性。但由于SSL错误而无法执行此操作。下面是代码fromazure.iot.hubimportIoTHubRegistryManagerimportcertifiimportssl#ConnecttoIoTHubandsendmessagetodeviceCONNECTION_STRING="HostName=iothub-j......
  • 【Python将字符串连接在一起】
    当然,Python是一个功能丰富且灵活的语言,有许多技巧和最佳实践可以帮助你更有效地编写代码。以下是一些常见的Python技巧:列表推导式(ListComprehensions):这是一种简洁的构建列表的方法。它比使用循环更加清晰和Pythonic。[x*2forxinrange(5)]#输出:[0,2,4,6,......
  • 我心中的王者:Python-第2章 认识变量与基本数学运算
    我心中的王者:Python-第2章认识变量与基本数学运算本章将从基本数学运算开始,一步一步讲解变量的使用与命名,接着介绍Python的算术运算。2-1用Python做计算假设读者到麦当劳打工,一小时可以获得120元时薪,如果想计算一天工作8小时,可以获得多少工资?我们可以用计算器执行“1......
  • 【Dison夏令营 Day 25】用Python写个2048
    在本文中,我们将用python代码和逻辑来设计一款你经常在智能手机上玩的2048游戏。如果您对该游戏不熟悉,强烈建议您先玩一下该游戏,以便了解其基本功能。如何玩2048.NET?1.有一个4*4的网格,可以填入任何数字。一开始,随机填入两个2的单元格。其余单元格为空。我们......