PyTorch: ошибка типа: объект ‘int’ не может быть подписан

#python #pytorch

Вопрос:

Я новичок в pytorch и создаю функцию быстрого кодирования для многослойного персептрона, но у меня возникли некоторые проблемы. Вот код:

 def one_hot_encoding(label):
    for idx, val in enumerate(label):
        one_hot_outputs = [0]*len(label)
        idx_n = idx[val]
        one_hot_outputs[idx_n] = 1
return one_hot_outputs
 

У меня ошибка типа, говорящая:

 in one_hot_encoding(label)
  2     for idx, val in enumerate(label):
  3         one_hot_outputs = [0]*len(label)
> 4         idx_n = idx[val]
  5         one_hot_outputs[idx_n] = 1
  6     return one_hot_outputs
TypeError: 'int' object is not subscriptable
 

Какая-нибудь помощь?

Комментарии:

1. вместо использования idx_n = idx[val] вы должны использовать idx_n = label[idx] . idx является только целым числом. Вы не можете применить к нему индекс. То, к чему вы хотите получить доступ, — это элемент с индексом val label . Как бы то ни было, я не понимаю, что вы здесь пытаетесь сделать. Значение label[idx] из хранится в val любом случае

2. Поэтому я пытаюсь изменить значение, которое я хочу, на 1, а все остальные значения на 0. Что вы имеете в виду под значением label[idx] «хранится val «??

3. Я предлагаю вам ознакомиться с документацией по методу перечисления python.

Ответ №1:

Это не прямой ответ, а альтернатива. У PyTorch уже есть функциональность для этого: torch.nn.functional.one_hot . Итак, если у вас есть тензор меток label и n классы, просто позвоните:

 torch.nn.functional.one_hot(label, num_classes=n)