前提
BERTによる文章分類の勉強中です。本にあるお手本コードを自分の研究に沿っていじりながら進めていたところ、詰まってしまいました。
実現したいこと
データローダの作成
発生している問題・エラーメッセージ
エラーメッセージ ValueError Traceback (most recent call last) <ipython-input-21-5497bf7ea51d> in <module> 12 # 学習データはshuffle=Trueにする。 13 dataloader_train = DataLoader( ---> 14 dataset_train, batch_size=32, shuffle=True 15 ) 16 dataloader_val = DataLoader(dataset_val, batch_size=256) 1 frames /usr/local/lib/python3.7/dist-packages/torch/utils/data/sampler.py in __init__(self, data_source, replacement, num_samples, generator) 106 if not isinstance(self.num_samples, int) or self.num_samples <= 0: 107 raise ValueError("num_samples should be a positive integer " --> 108 "value, but got num_samples={}".format(self.num_samples)) 109 110 @property ValueError: num_samples should be a positive integer value, but got num_samples=0
該当のソースコード
python
ソースコード
# データローダーの作成 dataset_for_loader = [ {'data':torch.tensor([0,1]), 'labels':torch.tensor(0)}, {'data':torch.tensor([2,3]), 'labels':torch.tensor(1)}, {'data':torch.tensor([4,5]), 'labels':torch.tensor(2)}, {'data':torch.tensor([6,7]), 'labels':torch.tensor(3)}, ] loader = DataLoader(dataset_for_loader, batch_size=2) # データセットからミニバッチを取り出す for idx, batch in enumerate(loader): print(f'# batch {idx}') print(batch) ## ファインチューニングではここでミニバッチ毎の処理を行う loader = DataLoader(dataset_for_loader, batch_size=2, shuffle=True) for idx, batch in enumerate(loader): print(f'# batch {idx}') print(batch) # トークナイザのロード tokenizer = BertJapaneseTokenizer.from_pretrained(MODEL_NAME) # 各データの形式を整える max_length = 128 dataset_for_loader = [] text = df['text'].values.tolist() # データを格納 encoding = tokenizer( text, max_length=max_length, padding='max_length', truncation=True ) encoding['labels'] = df['label'].values.tolist() # ラベルを追加 encoding = { k: torch.tensor(v) for k, v in encoding.items() } dataset_for_loader.append(encoding) random.shuffle(dataset_for_loader) # ランダムにシャッフル n = len(dataset_for_loader) n_train = int(0.6*n) n_val = int(0.2*n) dataset_train = dataset_for_loader[:n_train] # 学習データ dataset_val = dataset_for_loader[n_train:n_train+n_val] # 検証データ dataset_test = dataset_for_loader[n_train+n_val:] # テストデータ dataloader_train = DataLoader( dataset_train, batch_size=32, shuffle=True<---------------------ここです ) dataloader_val = DataLoader(dataset_val, batch_size=256) dataloader_test = DataLoader(dataset_test, batch_size=256)
試したこと
エラーメッセージで検索したところ、学習データの読み込みがうまくいっていない等の回答が多いのですが、私のコードで、データの読み込みがうまくいっていない箇所がわからず困っています。
補足情報(FW/ツールのバージョンなど)
Google Colabolatory
transformers==4.18.0 fugashi==1.1.0 ipadic==1.0.0 pytorch-lightning==1.6.1
あなたの回答
tips
プレビュー