如何在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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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