【问题标题】:How to transform amino acid raw data to 3d tensor by one hot encoding by tensorflow如何通过tensorflow的一次热编码将氨基酸原始数据转换为3d张量
【发布时间】:2021-04-05 17:45:21
【问题描述】:

我的数据在一列中有氨基酸原始输入。 df['wordstring'] 列中值的最大长度假设为 400。词汇表的总大小为 20,正如您从不同氨基酸的数量中猜测的那样。此外,假设我有 1M 行序列。我知道如何为每个序列创建一个热编码。我想要做的是创建一个具有 20 X 400 X 1M 尺寸的 3D 矩阵(张量)。 TensorFlow有没有办法做到这一点? Pytorch 也可以作为替代品。

例如:假设s1 = df['wordstring'][0] (= 'a s g y t f t s y g i s w v r q ... ') 并假设len(s1) = 160。因此,我必须获得 160 个单热编码字母(单词),除此之外,我需要应用使张量为 400 X 20 的填充。以类似的方式,我必须创建其中的 1M。然后我将获得我的 20 X 400 X 1M 维度张量,以便应用 LSTM、双向 LSTM 等。

一种更数学的方式,将氨基酸向量 A C D .... 的 20 个分量称为 <a1, a2, a3, ... , a19, a20>,并将其放在 z 轴上。其次,由于所有序列的最大长度为 400,假设我们有 <v1, v2, v3,... v399, v400> 向量并将它们放在 y 轴上。最后,由于我们有 1M 不同的序列,我们将在 x 轴上有 <x1, x2, x3, ... , x1M> 长向量。

单词嵌入之间的区别在于我需要一次对每个单词(在我的情况下是每个字母)进行 1 编码。我不需要为每个文档(在我的情况下为序列)提供一个向量表示,这通常适用于常见的 NLP 问题。

【问题讨论】:

  • 您能否提供一个可重现的输入和预期输出作为示例?目前还不清楚您希望如何创建编码,一个示例将使其非常清楚。另外,一旦您更新了答案,请在此处发表评论,以便我收到通知并尽早查看:)

标签: python tensorflow multidimensional-array one-hot-encoding word-embedding


【解决方案1】:

您想要做的是使用 NLP 模型中使用的嵌入层。这意味着:

  1. 创建将符号映射到唯一 ID 的词汇表。
  2. 使用 ID 对输入进行编码。
  3. 创建一个embedding layer in TensofFlow,为每个分配一个可训练向量。它会给你一个张量,你可以在任何 NN 中进一步使用它。

您可以自行执行步骤 1-2,也可以使用一些 TensorFlow 实用程序,您可以在 tf.keras.preprocessing.text 中找到这些实用程序。您可能会在Word embeddings tutorial 中找到一些提示。

这在 PyTorch 中也非常可行。在这种情况下,您将使用nn.Embedding layer。各个实用程序函数都在一个独立的包中torchtext

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多