gpt4 book ai didi

python - 有没有办法加速 tf.keras 中的嵌入层?

转载 作者:行者123 更新时间:2023-11-30 08:47:59 24 4
gpt4 key购买 nike

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

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

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

事实上,该模型现在工作得好多了,但速度慢了大约 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

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

最佳答案

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

关于python - 有没有办法加速 tf.keras 中的嵌入层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com