python - 使用带有 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 和我们的库安装在不同硬盘上的事实会导致问题吗?(这是出现问题的设置的相似之处之一)
解决方案
推荐阅读
- ios - 带有 Lottie 动画的动态按钮
- isabelle - Isabelle中函数定义案例分析
- html - Thymleaf 页脚不固定
- node.js - 通过邮递员 api 节点 js 发布请求时出错
- java - LiquiBase 问题,类路径资源 [db/changelog/db.changelog-master.yaml] 无法解析为 URL,因为它不存在
- reactjs - React Native 无法分配给对象的只读属性“exports”
- python - Tensorflow 层将输入映射到回归图
- python - 如何在 Python 中使用 Google Cloud Firestore 检索子集合?
- python - 循环的有效方法
- java - 如何解决 PostgreSQL 的连接问题