亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于句子的 Pytorch 數據加載器

用于句子的 Pytorch 數據加載器

臨摹微笑 2022-07-12 09:57:14
我收集了一個用于二進制文本分類的小數據集,我的目標是使用Convolutional Neural Networks for Sentence Classification提出的方法訓練模型我通過使用torch.util.data.Dataset. 基本上我的數據集中的每個樣本my_data都是這樣的(例如):{"words":[0,1,2,3,4],"label":1},{"words":[4,9,20,30,4,2,3,4,1],"label":0}接下來我看了一下用 pytorch 編寫自定義數據加載器:使用:dataloader = DataLoader(my_data, batch_size=2,                    shuffle=False, num_workers=4)我懷疑枚舉一個批次會產生以下結果:{"words":[[0,1,2,3,4],[4,9,20,30,4,2,3,4,1]],"labels":[1,0]}然而它更像是這樣的:{"words":[[0,4],[1,9],[2,20],[3,30],[4,4]],"label":[1,0]}我想這與它們的大小不相等有關。它們是否需要相同的大小,如果需要,我該如何實現?對于了解這篇論文的人來說,你的訓練數據是什么樣的?編輯:class CustomDataset(Dataset):def __init__(self, path_to_file, max_size=10, transform=None):    with open(path_to_file) as f:        self.data = json.load(f)    self.transform = transform    self.vocab = self.build_vocab(self.data)    self.word2idx, self.idx2word = self.word2index(self.vocab)def get_vocab(self):    return self.vocabdef get_word2idx(self):    return self.word2idx, self.idx2worddef __len__(self):    return len(self.data)def __getitem__(self, idx):    if torch.is_tensor(idx):        idx = idx.tolist()    inputs_ = word_tokenize(self.data[idx][0])    inputs_ = [w for w in inputs_ if w not in stopwords]    inputs_ = [w for w in inputs_ if w not in punctuation]    inputs_ = [self.word2idx[w] for w in inputs_]  # convert words to index    label = {"positive": 1,"negative": 0}    label_ = label[self.data[idx][1]] #convert label to 0|1    sample = {"words": inputs_, "label": label_}    if self.transform:        sample = self.transform(sample)    return sample
查看完整描述

1 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

正如您正確懷疑的那樣,這主要是張量形狀不同的問題。幸運的是,PyTorch 為您提供了幾種簡單的解決方案來實現您想要的(文本樣本的批量大小 >= 1):

  • 最高級別的解決方案可能是torchtext,它提供了幾種開箱即用的解決方案來為 NLP 任務加載(自定義)數據集。如果您可以使您的訓練數據適合任何一種描述的加載器,這可能是推薦的選項,因為有一個不錯的文檔和幾個示例。

  • 如果您更喜歡構建解決方案,則可以使用填充解決方案,例如torch.nn.utils.rnn.pad_sequence, 組合torch.nn.utils.pack_padded_sequence或兩者的組合 ( torch.nn.utils.rnn.pack_sequence。這通??梢詾槟峁└蟮撵`活性,這可能是也可能不是你需要的。

就個人而言,我有很好的使用 just 的經驗pad_sequence,并且為了更清晰的調試狀態犧牲了一點速度,似乎其他人也有類似的建議


查看完整回答
反對 回復 2022-07-12
  • 1 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號