pytorch 将字典转换为Tensor,然后再转换回来

kkih6yb8  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(393)

我从一个dictionary对象开始:

{"train": [{"input": [[3, 1, 2], [3, 1, 2], [3, 1, 2]], "output": [[4, 5, 6], [4, 5, 6], [4, 5, 6]]}, {"input": [[2, 3, 8], [2, 3, 8], [2, 3, 8]], "output": [[6, 4, 9], [6, 4, 9], [6, 4, 9]]}]}

然后我想给循环中的每个输入和输出对象添加填充,所以我把每个输入和输出转换成Tensor,这样我就可以使用F.pad来添加填充。

tensor([[0, 0, 0, 0, 0],
        [0, 3, 1, 2, 0],
        [0, 3, 1, 2, 0],
        [0, 3, 1, 2, 0],
        [0, 0, 0, 0, 0]]).

第一次输出的结果:

tensor([[0, 0, 0, 0, 0],
        [0, 4, 5, 6, 0],
        [0, 4, 5, 6, 0],
        [0, 4, 5, 6, 0],
        [0, 0, 0, 0, 0]])

这样就可以了,现在,我想把生成的Tensor重新构造成和原始字典一样的形式,看起来像这样:

{"train": [{"input": [[0, 0, 0, 0, 0], [0, 3, 1, 2, 0], [0, 3, 1, 2, 0], [0, 3, 1, 2, 0], [0, 0, 0, 0, 0]], "output": [[0, 0, 0, 0, 0], [0, 4, 5, 6, 0], [0, 4, 5, 6, 0], [0, 4, 5, 6, 0], [0, 0, 0, 0, 0]]}, {"input": [[0, 0, 0, 0, 0],
        [0, 2, 3, 8, 0],
        [0, 2, 3, 8, 0],
        [0, 2, 3, 8, 0],
        [0, 0, 0, 0, 0]], "output": [[0, 0, 0, 0, 0],
        [0, 6, 4, 9, 0],
        [0, 6, 4, 9, 0],
        [0, 6, 4, 9, 0],
        [0, 0, 0, 0, 0]]}]}

我可以看到一个字符串连接的方式可能会工作:
第一个月
或者类似的东西,但是考虑到不同数组中元素的数量不同,这看起来像是一个循环噩梦,我在想一定有更好的方法,有人知道是什么吗?

vltsax25

vltsax251#

以下内容是否符合您的目的?

in_dict = {"train": [{"input": [[3, 1, 2], [3, 1, 2], [3, 1, 2]], "output": [[4, 5, 6], [4, 5, 6], [4, 5, 6]]}, {"input": [[2, 3, 8], [2, 3, 8], [2, 3, 8]], "output": [[6, 4, 9], [6, 4, 9], [6, 4, 9]]}]}

train_examples = []
for item in in_dict['train']:
    in_tensor = torch.Tensor(item['input'])
    out_tensor = torch.Tensor(item['output'])
    train_examples.append([in_tensor, out_tensor])

out_dict = {'train': []}
for item in train_examples:
    out_dict['train'].append({
        'input': item[0].tolist(),
        'output': item[1].tolist()
    })

print(out_dict)

相关问题