【问题标题】:'tuple' object does not support item assignment in torch.cat()\'tuple\' 对象不支持 torch.cat() 中的项目分配
【发布时间】:2023-02-06 20:29:36
【问题描述】:

我正在尝试使用 torch.cat() 来连接火炬张量。但是,我遇到错误消息 --> “元组”对象不支持项目分配。

这是我的代码:

inputs = tokenizer.encode_plus(txt, add_special_tokens=False, return_tensors="pt")
input_id_chunks = inputs["input_ids"][0].split(510)
mask_chunks = inputs["attention_mask"][0].split(510)

print(type(input_id_chunks))

for i in range(len(input_id_chunks)):
    print(type(input_id_chunks[i]))
    print(input_id_chunks[i])

    input_id_chunks[i] = torch.cat([
        torch.Tensor([101]), input_id_chunks[i], torch.Tensor([102])
    ])

输出看起来不错,inputs_id_chunks[i] 是 torch.Tensor:

`<类'元组'>

<class 'torch.Tensor'>`

但是我收到以下打印和错误消息:

类型错误:“元组”对象不支持项目分配

在 torch.cat() 中

我使用了 torch.cat() 的小测试代码,它工作正常,但我不知道我的原始代码中缺少什么。

【问题讨论】:

  • 你不能改变元组值

标签: python pytorch torch bert-language-model


【解决方案1】:

看起来问题是您正在尝试重新分配给一个不可变的元组。当您执行 input_id_chunks[i] = ... 时,您正试图修改元组中的项目,这是不允许的。

要解决此问题,您可以将 input_id_chunks 的类型更改为列表,因为列表是可变的并且支持项目分配。

这是修改后的代码:

inputs = tokenizer.encode_plus(txt, add_special_tokens=False, return_tensors="pt")
input_id_chunks = inputs["input_ids"][0].split(510)
mask_chunks = inputs["attention_mask"][0].split(510)

input_id_chunks = list(input_id_chunks) # Convert tuple to list

for i in range(len(input_id_chunks)):
input_id_chunks[i] = torch.cat([
torch.Tensor([101]), input_id_chunks[i], torch.Tensor([102])
])

input_id_chunks = tuple(input_id_chunks) # Convert list back to tuple if necessary

【讨论】:

    猜你喜欢
    • 2013-10-20
    • 1970-01-01
    • 2015-03-09
    • 2019-01-03
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多