Пэды векторов в tf.keras для LSTM - PullRequest
1 голос
/ 17 июня 2020

Keras имеет утилиту предварительной обработки для последовательностей падов , но предполагает, что последовательности являются целыми числами.

Мои последовательности являются векторами (мои собственные вложения, я не хочу использовать Keras вложения), есть ли способ дополнить их для использования в LSTM?

Последовательности можно сделать равными в Python, но методы заполнения в Keras предоставляют дополнительную метаинформацию для таких слоев, как LSTM для маскировки .

1 Ответ

1 голос
/ 17 июня 2020

это возможность дополнить массив чисел с плавающей запятой разной длины нулями

, чтобы замаскировать нули, вы можете использовать маскирующий слой (в противном случае удалите его)

Я инициализирую ваши вложения в список, потому что numpy не может обрабатывать массивы разной длины. в этом примере я использую 4 образца разной длины. относительные вложения хранятся в этом списке list ([1,300], [2300], [3,300], [4,300])

# recreate your embed
emb = []
for i in range(1,5):
    emb.append(np.random.uniform(0,1, (i,300)))

# custom padding function
def pad(x, max_len):
    new_x = np.zeros((max_len,x.shape[-1]))
    new_x[:len(x),:] = x # post padding
    return new_x

# pad own embeddings
emb = np.stack(list(map(lambda x: pad(x, max_len=100), emb)))

emb_model = tf.keras.Sequential()
emb_model.add(tf.keras.layers.Masking(mask_value=0., input_shape=(100, 300)))
emb_model.add(tf.keras.layers.LSTM(32))

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