0

我正在为Seq2Seq模型构建数据集,该模型要求数据采用单热编码填充序列的形式。

例如,如果我的序列包含“a”(a),那么它应该生成如下内容(给定最大序列大小可以是 4):

[[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]

所以我厌倦了先填充序列,然后对填充的序列进行一次热编码(在这个答案中有所回答)。

train_padded_txt_Y1 = to_categorical(pad_sequences(training_txt_Y1, maxlen=max_label_len, padding='post', value = len(char_list)))

但是,上面会产生如下所示的单热编码填充序列,其中填充字符被视为要编码的类:

[[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
   [0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],
   [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]]

您可以在每个生成的 one-hot 编码中看到一个附加元素。

所以这里的问题是,是否可以使用Keras实用程序来获得我需要的一次性编码填充序列,或者我是否必须进行一些自定义实现?

4

0 回答 0