【发布时间】: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