首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Keras fit_generator运行得非常慢

Keras fit_generator运行得非常慢
EN

Stack Overflow用户
提问于 2019-11-02 11:19:26
回答 1查看 397关注 0票数 2

我使用以下代码声明了一个Keras模型:

代码语言:javascript
运行
复制
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.LSTM(units=50, activation="tanh", return_sequences=False, input_shape=(settings["past_size"], len(indicators_used))))
model.add(tf.keras.layers.Dense(3, activation="softmax"))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit_generator(
    generator=batch_generator(train_x, train_y),
    steps_per_epoch=n_batches_per_epoch,
    epochs=settings["epochs"],
    workers=5,
    use_multiprocessing=True,
    max_queue_size=10000)

我试验了workersuse_multiprocessingmax_queue_size设置,但没有结果。输入形状为(100000, 500, 27)

批处理生成器函数如下所示:

代码语言:javascript
运行
复制
def batch_generator(x, y):
    while True:
        for i in range(n_batches_per_epoch):
            x_train = []
            y_train = []
            for j in range(settings["past_size"] + settings["batch_size"] * i, settings["past_size"] + (settings["batch_size"] * (i + 1))):
                x_train.append(x.iloc[j - past_size:j].to_numpy())
                y_train.append(y.iloc[j].to_numpy())
            return_x, return_y = np.array(x_train), np.array(y_train)
            yield return_x, return_y

执行时间:

767ms/step

  • Batch大小512个:1s/step

  • Batch大小1024:2s/step

我现在面临的问题是,Keras的训练过程非常缓慢。一个时代大约需要45分钟。我不能使用model.fit(),因为数据对内存来说太大了。

我对batch_generator功能的理解是,函数准备批处理并在GPU / TPU上加载它们,但情况似乎并非如此。此代码运行在Google与TPU运行时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-02 19:39:54

在Google环境中,您需要显式地将模型转换为与TPU兼容的版本。这是我上一次与Google Colab合作时的错误。

代码语言:javascript
运行
复制
TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
tpu_model = tf.contrib.tpu.keras_to_tpu_model(
    model,
    strategy=tf.contrib.tpu.TPUDistributionStrategy(
    tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))

tpu_modelmodel具有相同的接口。

指南:https://medium.com/tensorflow/tf-keras-on-tpus-on-colab-674367932aa0

不幸的是,这似乎不适用于Sequential api。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58670563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档