Как исправить «TypeError: тип данных не понят» в numpy при создании преобразователя без пиковой маски

1

Я пытаюсь реализовать и обучить преобразователя для NMT через сообщение в блоге, все работает, за исключением того, что я не могу создать маску без пиков, так как я получаю эту ошибку: "Ошибка типа: тип данных не понят"

Код:

target_seq = batch.Python.transpose(0,1)
target_pad = PY_TEXT.vocab.stoi['<pad>']
target_msk = (target_seq != target_pad).unsqueeze(1)
size = target_seq.size(1) # get seq_len for matrix
nopeak_mask = np.triu(np.ones(1, size, size),
k=1).astype('uint8')
nopeak_mask = Variable(torch.from_numpy(nopeak_mask) == 0)
target_msk = target_msk & nopeak_mask

Сообщение об ошибке:

TypeError                                 Traceback (most recent call last)
<ipython-input-36-e19167b74ba0> in <module>()
      4 target_msk = (target_seq != target_pad).unsqueeze(1)
      5 size = target_seq.size(1) # get seq_len for matrix
----> 6 nopeak_mask = np.triu(np.ones(1, size, size),
      7 k=1).astype('uint8')
      8 nopeak_mask = Variable(torch.from_numpy(nopeak_mask) == 0)

~/.local/lib/python3.6/site-packages/numpy/core/numeric.py in ones(shape, dtype, order)
    201 
    202     """
--> 203     a = empty(shape, dtype, order)
    204     multiarray.copyto(a, 1, casting='unsafe')
    205     return a

TypeError: data type not understood
  • 1
    Первым аргументом для np.ones должен быть кортеж размеров: np.ones((1,size,size)) . Как вы написали, size интерпретируется как dtype, второй аргумент для np.ones . Обратите внимание, как ошибка указывает на np.empty функции np.empty с тем же требованием - shape, dtype, order .
  • 1
    @hpaulj спасибо, спасибо за объяснение.
Теги:
numpy
deep-learning
pytorch

1 ответ

0
Лучший ответ

Первым вводом в np.triu должен быть кортеж желаемых размеров, а не просто массив.

Пытаться:

np.triu((1, size, size), k=1).astype("uint8")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню