Горячее кодирование в керасе без петель - PullRequest
2 голосов
/ 09 марта 2020

Я хочу сгенерировать одно горячее кодирование для списка последовательностей.

def encode_output(sequences, vocab_size):
  y = np.zeros([sequences.shape[0], sequences.shape[1], vocab_size], dtype='int16')
  for i in range(sequences.shape[0]):
    y[i] = keras.utils.to_categorical(sequences[i], num_classes=vocab_size, dtype='int16')
  return y

Последовательности - это массив 2-D numpy

array([[  23,    4,  563, ...,    0,    0,    0],
       [3480,    3,   86, ...,    0,    0,    0],
       [   9,  930,    6, ...,    0,    0,    0],
       ...,
       [ 507, 1408,    0, ...,    0,    0,    0],
       [4447,   13,  642, ...,    0,    0,    0],
       [   1,  195, 2618, ...,    0,    0,    0]], dtype=int32)

Мой код работает нормально, но может быть есть способ сделать это без за l oop?

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Вы можете просто использовать array-assignment -

def encode_vectorized(a, n, dtype=int):
    out = np.zeros(a.shape + (n,), dtype=dtype)
    np.put_along_axis(out, a[...,None], 1, axis=-1)
    return out
1 голос
/ 09 марта 2020

Для упражнений OHE я всегда использую: pd.get_dummies

Вот простой пример:

import pandas as pd
s = pd.Series(list('abca'))

pd.get_dummies(s)
   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0

Ресурс:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...