如何在Keras中对序列进行双侧零填充并将其编码为独热编码?

我有如下文本数据。

X_train_orignal= np.array(['OC(=O)C1=C(Cl)C=CC=C1Cl', 'OC(=O)C1=C(Cl)C=C(Cl)C=C1Cl',       'OC(=O)C1=CC=CC(=C1Cl)Cl', 'OC(=O)C1=CC(=CC=C1Cl)Cl',       'OC1=C(C=C(C=C1)[N+]([O-])=O)[N+]([O-])=O'])

显然,不同的序列长度不同。我如何能对序列的两侧进行零填充至某个最大长度?然后基于每个字符将每个序列转换为独热编码?

尝试:

我使用了以下Keras API,但它不适用于字符串序列。

keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.0)

我可能需要先将我的序列数据转换为独热向量,然后再进行零填充。为此,我尝试使用Tokanize如下所示。

tk = Tokenizer(nb_words=?, split=?)

但是,我的序列数据没有空格,split值和nb_words应该是什么?如何将其用于基于字符的独热编码?

我的总体目标是在将序列输入到RNN之前,对其进行零填充并转换为独热编码。


回答:

所以我找到了一个方法,先使用Tokenizer,然后使用pad_sequences在序列开始处进行零填充,如下所示。

from keras.preprocessing.text import Tokenizertokenizer = Tokenizer(char_level=True)tokenizer.fit_on_texts(X_train_orignal)sequence_of_int = tokenizer.texts_to_sequences(X_train_orignal)

这会给我如下输出。

[[3, 1, 4, 2, 3, 5, 1, 6, 2, 1, 4, 1, 7, 5, 1, 2, 1, 1, 2, 1, 6, 1, 7], [3,  1,  4,  2,  3,  5,  1,  6,  2,  1,  4,  1,  7,  5,  1,  2,  1,  4,  1,  7,  5,  1,  2,  1,  6,  1,  7], [3, 1, 4, 2, 3, 5, 1, 6, 2, 1, 1, 2, 1, 1, 4, 2, 1, 6, 1, 7, 5, 1, 7], [3, 1, 4, 2, 3, 5, 1, 6, 2, 1, 1, 4, 2, 1, 1, 2, 1, 6, 1, 7, 5, 1, 7], [3,  1,  6,  2,  1,  4,  1,  2,  1,  4,  1,  2,  1,  6,  5,  8,  10,  11,  9,  4,  8,  3,  12,  9,  5,  2,  3,  5,  8,  10,  11,  9,  4,  8,  3,  12,  9,  5,  2,  3]]

现在我不明白为什么sequence_of_int[1], sequence_of_int[4]的输出是以列格式显示的?

在获取标记后,我应用了pad_sequences如下所示。

seq=keras.preprocessing.sequence.pad_sequences(sequence_of_int, maxlen=None, dtype='int32', padding='pre', value=0.0)

它会给我如下输出。

array([[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,         0,  3,  1,  4,  2,  3,  5,  1,  6,  2,  1,  4,  1,  7,  5,  1,         2,  1,  1,  2,  1,  6,  1,  7],       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  1,  4,         2,  3,  5,  1,  6,  2,  1,  4,  1,  7,  5,  1,  2,  1,  4,  1,         7,  5,  1,  2,  1,  6,  1,  7],       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,         0,  3,  1,  4,  2,  3,  5,  1,  6,  2,  1,  1,  2,  1,  1,  4,         2,  1,  6,  1,  7,  5,  1,  7],       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,         0,  3,  1,  4,  2,  3,  5,  1,  6,  2,  1,  1,  4,  2,  1,  1,         2,  1,  6,  1,  7,  5,  1,  7],       [ 3,  1,  6,  2,  1,  4,  1,  2,  1,  4,  1,  2,  1,  6,  5,  8,        10, 11,  9,  4,  8,  3, 12,  9,  5,  2,  3,  5,  8, 10, 11,  9,         4,  8,  3, 12,  9,  5,  2,  3]], dtype=int32)

然后,我将其转换为独热编码如下所示。

one_hot=keras.utils.to_categorical(seq)

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注