【问题标题】:Is there a way to speed up Embedding layer in tf.keras?有没有办法加快 tf.keras 中的嵌入层?
【发布时间】:2019-10-17 22:15:21
【问题描述】:

我正在尝试实现用于 DNA 序列分类的 LSTM 模型,但目前它无法使用,因为训练需要多长时间(6.5K 序列每个 epoch 25 秒,每个样本大约 4ms,我们需要训练多个版本的模型超过 100 上千个序列)。

DNA 序列可以表示为一串 A、C、G 和 T,例如“ACGGGTGACAT”可以是单个 DNA 序列的一个例子。每个序列都属于我要预测的两个类别之一,每个序列包含 1000 个字符。

最初,我的模型不包含嵌入层,而是手动将每个序列转换为单热编码矩阵(4 行 x 1000 列),该模型效果不佳,但速度非常快。在这一点上,虽然我在网上看到使用嵌入层具有明显的优势。所以我添加了一个嵌入层,而不是使用 one-hot 编码矩阵,而是将序列转换为整数,每个字符由不同的整数表示。

确实,该模型现在工作得更好,但速度慢了大约 30 倍,而且无法使用。我可以在这里做些什么来加快嵌入层的速度吗?

以下是构建和拟合我的模型的函数:

from tensorflow.keras.layers import Embedding, Dense, LSTM, Activation
from tensorflow.keras import Sequential
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical

def build_model():
    # initialize a sequential model
    model = Sequential()

    # add embedding layer
    model.add(Embedding(5, 1, input_length=1000, mask_zero=True))

    # Add LSTM layer
    model.add(
       LSTM(5)
    )

    # Add Dense NN layer
    model.add(
        Dense(units=2)
    )

    model.add(Activation('softmax'))

    optimizer = Adam(clipnorm=1.)

    model.compile(
        loss="categorical_crossentropy", optimizer=optimizer, metrics=['accuracy']
    )

    return model

def train_model(X_train, y_train, epochs, batch_size):
    model = build_model()

    # y_train is initially a list of zeroes and ones, needs to be converted to categorical
    y_train = to_categorical(y_train)  

    history = model.fit(
        X_train, y_train, epochs=epochs, batch_size=batch_size
    )

    return model, history

任何帮助将不胜感激 - 经过多次谷歌搜索和反复试验,我似乎无法加快速度。

【问题讨论】:

  • 你是在 GPU 上训练吗?
  • 是的,在 GPU 上训练。

标签: python tensorflow machine-learning keras deep-learning


【解决方案1】:

一个可能的建议是使用“更便宜”的 RNN,例如 SimpleRNN 而不是 LSTM。它需要训练的参数更少。在一些简单的测试中,我得到了比 LSTM 快约 3 倍的速度,并且具有与您目前所拥有的相同的嵌入处理。不确定您是否可以将序列长度从 1000 减少到更低的数字,但这也可能是一个探索的方向。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2013-06-24
    • 2023-03-27
    • 1970-01-01
    • 2019-11-23
    • 2018-07-03
    • 2022-06-18
    • 1970-01-01
    相关资源
    最近更新 更多