程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python - PyTorch:IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python - PyTorch:IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引?

开发过程中遇到Python - PyTorch:IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引的问题如何解决?下面主要结合日常开发的经验,给出你关于Python - PyTorch:IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引的解决方法建议,希望对你解决Python - PyTorch:IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引有所启发或帮助;

我正在使用 PyTorch 解决 BERT 的文本分类问题。这是我正在使用的 PyTorch 数据集格式,但是当我尝试访问来自数据集的输入时出现错误。

PyTorch 数据集

数据集返回一个包含以下内容的字典:IDsmasktoken_type_IDstargets

class JigsawDataset:
    def __init__(self,df,train_transforms = None):
        self.comment_text = df["comment_text"].values
        self.target = df["toxic"].values
        self.tokenizer = config.BERT_TOKENIZER
        self.max_len = config.MAX_LEN
        self.langs = df["lang"].values
        self.train_transforms = train_transforms

    def __len__(self):
        return len(self.comment_text)

    def __getitem__(self,item):
        comment_text = str(self.comment_text[item])
        comment_text = " ".join(comment_text.split())
        lang = self.langs[item]
        
        if self.train_transforms:
            comment_text,_ = self.train_transforms(data=(comment_text,lang))['data']

        inputs = self.tokenizer.encode_plus(
            comment_text,None,add_special_tokens=True,max_length=self.max_len,pad_to_max_length=True,truncation=True,)

        IDs = inputs["input_IDs"]
        mask = inputs["attention_mask"]
        token_type_IDs = inputs["token_type_IDs"]

        data_loader_dict = {}
        data_loader_dict["IDs"] = torch.tensor(IDs,dtype=torch.long)
        data_loader_dict["mask"] = torch.tensor(mask,dtype=torch.long)
        data_loader_dict["token_type_IDs"] = torch.tensor(token_type_IDs,dtype=torch.long)
        data_loader_dict["targets"] = torch.tensor(self.target[item],dtype=torch.float)
        
        
        return data_loader_dict

出现错误的相关代码

在这种情况下,我试图仅加载 1 个样本并使其成为 PyTorch 数据集的格式

df = pd.read_csv("dataset.csv")
df = df.head(1) # Trying with only 1 Sample
dataset = JigsawDataset(df)

IDs = dataset["IDs"]    # Error occurs at this line
mask = dataset["mask"]
token_type_IDs = ["token_type_IDs"]

错误

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-78-4608dd623cac> in <module>
      3 dataset = JigsawDataset(df)
      4 
----> 5 IDs = dataset["IDs"]    # Error occurs at this line
      6 mask = dataset["mask"]
      7 token_type_IDs = ["token_type_IDs"]

<ipython-input-40-121d8aa71516> in __getitem__(self,item)
     13 
     14     def __getitem__(self,item):
---> 15         comment_text = str(self.comment_text[item])
     16         comment_text = " ".join(comment_text.split())
     17         lang = self.langs[item]

IndexError: only integers,slices (`:`),ellipsis (`...`),numpy.newaxis (`None`) and integer or boolean arrays are valID indices

如何解决这个问题?

解决方法

根据 the docs,panda 的 DataFrame 对象的方法 'values' 返回一个 numpy 数组。
在您的代码中,您将属性 'self.comment_text' 设置为由 'df["comment_text"].values' 返回的 numpy 数组(代码框 1 中的第 3 行)。
Numpy 数组不接受字符串作为索引。
很难给你一个答案,我相信不测试它就可以工作,但我会从将属性“self.comment_text”设置为数据帧或它的副本开始,而不仅仅是它所包含的值。

我会改变这个:

class JigsawDataset:
    def __init__(self,df,train_transforms = None):
        self.comment_text = df["comment_text"].values
        self.target = df["toxic"].values
        self.tokenizer = config.BERT_TOKENIZER
.
.
.

为此:

class JigsawDataset:
    def __init__(self,train_transforms = None):
        self.comment_text = df["comment_text"]
        self.target = df["toxic"].values
        self.tokenizer = config.BERT_TOKENIZER
.
.
.
,

我发现了问题。

错误代码

ids = dataset["ids"]    
mask = dataset["mask"]
token_type_ids = ["token_type_ids"]

正确的代码

ids = dataset[0]["ids"]    
mask = dataset[0]["mask"]
token_type_ids = [0]["token_type_ids"]

问题是“ids”、“mask”和“token_type_ids”是字典键。 JigsawDataset 为每个样本返回一个字典。因此,为了访问样本,我们需要在指定键之前指定索引 ([0])。

大佬总结

以上是大佬教程为你收集整理的Python - PyTorch:IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引全部内容,希望文章能够帮你解决Python - PyTorch:IndexError:只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效的索引所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: