sai_nash
@sai_nash

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

AttributeError: 'tuple' object has no attribute 'Dataset' の解決方法

解決したいこと

以下で発生しているエラーを解決したい

機械学習をしている初学者です。
pytorchでデータセットを作成しているときに以下のようなエラーが発生し、何が原因か理解できておりません。
エラーの発生原因と解決方法を知りたいです。

発生している問題・エラー

AttributeError                            Traceback (most recent call last)
Cell In[27], line 4
      1 # の画像のDatasetを作成する
----> 4 class X_RayDataset(data.Dataset):
      5     """
      6     kaggle胸部X線の画像のDatasetクラス。PyTorchのDatasetクラスを継承。
      7 
   (...)
     15         訓練か検証かを設定
     16     """
     18     def __init__(self, file_list, transform=None, phase='train'):

AttributeError: 'tuple' object has no attribute 'Dataset'

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

class X_RayDataset(data.Dataset):
    """
    kaggle胸部X線の画像のDatasetクラス。PyTorchのDatasetクラスを継承。

    Attributes
    ----------
    file_list : リスト
        画像のパスを格納したリスト
    transform : object
        前処理クラスのインスタンス
    phase : 'train' or 'val'
        訓練か検証かを設定
    """

    def __init__(self, file_list, transform=None, phase='train'):
        self.file_image,self.file_label = file_list  # ファイルパスのリスト
        print(self.file_image,self.file_label)
        self.transform = transform  # 前処理クラスのインスタンス
        self.phase = phase  # train or valの指定

    def __len__(self):
        '''画像の枚数を返す'''
        return len(self.file_list)

    def __getitem__(self, index):
        '''
        前処理をした画像のTensor形式のデータとラベルを取得
        '''
        #X_Rayデータ用の処理
        img_path = self.file_image[index]
        img_label = self.file_label[index]
        #print(img_label)
        #print("ラベルは=",img_label)
        path_base="/home/kouki/kaggle_challenge/images/"
        img = cv2.imread(path_base+img_path)
        # 画像の前処理を実施
        img_transformed = self.transform(
            img, self.phase)  # torch.Size([3, 224, 224])
        # 画像のラベルをファイル名から抜き出す
        if self.phase == "train":
            label = img_label
        elif self.phase == "val":
            label = img_label
        #print(label)

        # ラベルを数値に変更する
        if label == "No Finding":
            label = 0
        elif label == "Cardiomegaly":
            label = 1
        elif label == "Emphysema":
            label = 2
        elif label == "Effusion":
            label = 3
        elif label == "Hernia":
            label = 4
        elif label == "Nodule":
            label = 5
        elif label == "Pneumothorax":
            label = 6
        elif label == "Atelectasis":
            label = 7
        elif label == "Mass":
            label = 8
        elif label == "Edema":
            label = 9
        elif label == "Consolidation":
            label = 10
        elif label == "Infiltration":
            label = 11
        elif label == "Fibrosis":
            label = 12
        elif label == "Pneumoni":
            label = 13
        

        return img_transformed, label


# 実行
train_dataset = X_RayDataset(
    train_list, transform=ImageTransform(size, mean, std), phase='train')
0

1Answer

dataにタプルが入っています。
最初の方に
from torch.utils import data
としているのに、ノートブックのどこかのセルで
data = …
みたいに上書きしているんでしょう。
Datasetをimportする部分を
from torch.utils.data import Dataset
としておけば対処できるでしょう。

1Like

Your answer might help someone💌