首页 > 解决方案 > 使用带有 LSTM 层的 Tensorboard 回调(cuDNN 实现)时,模型训练永远挂起 - Tensorflow 2.3

问题描述

我们决定将我们的代码库从 Tensorflow 1.13.1 迁移到 Tensorflow 2.3。

一切似乎都正常工作,除了使用 Tensorboard 回调训练 LSTM 模型时。训练过程在第一批之后永远挂起(也许 Tensorboard 等待永远不会出现的摘要操作?)。

经过一番调查,问题似乎来自依赖于 cuDNN 实现的 LSTM 层。事实上,当迫使 Tensorflow 依赖于 vanilla LSTM 层实现时,一切都按预期工作(给它与 cuDNN 实现不兼容的参数,参见https://www.tensorflow.org/api_docs/python/tf/keras/layers/LSTM)。

有什么建议可以解决这个问题吗?有谁知道为什么 Tensorboard 不适用于 LSTM 层的 cuDNN 实现?

# Callbacks
log_dir = './logs'
callbacks = [TensorBoard(log_dir=log_dir)] # Training works without this callback

# Model
words = Input(shape=(max_sequence_length,))
x = Embedding(input_dim, embedding_size, weights=[embedding_matrix], trainable=False)(words)
x = Bidirectional(LSTM(40, return_sequences=True))(x)  # Setting recurrent_dropout = 0.1 makes the training work (using the vanilla LSTM implementation)
hidden = concatenate([
    GlobalMaxPooling1D()(x),
    GlobalAveragePooling1D()(x),
])
hidden = add([hidden, Dense(40, activation='relu')(hidden)])
out = Dense(3, activation='softmax', kernel_initializer='glorot_uniform')(hidden)
model = Model(inputs=words, outputs=[out])
model.compile(optimizer=Adam(lr=0.01), loss='categorical_crossentropy')

# Fit
fit_history = model.fit(
    x_train,
    y_train,
    batch_size=batch_size,
    epochs=epochs,
    validation_data=validation_data,
    callbacks=callbacks
)

更新:在另一台计算机(Windows 10)上尝试过,一切似乎都正常工作......
但是,工作中的计算机主要在 Windows 7 上(问题发生在 2 台单独的 PC 上),我们正在使用虚拟环境。
另一个提示:python 和我们的库安装在不同硬盘上的事实会导致问题吗?(这是出现问题的设置的相似之处之一)

标签: pythontensorflowtensorflow2.0tensorboard

解决方案


推荐阅读