#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)