将Tensorboard回调与LSTM层配合使用时cuDNN实现,模型训练将永远挂起-Tensorflow 2.3

问题描述

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

除使用Tensorboard回调训练LSTM模型外,其他所有事情似乎都能正常运行。在第一批培训之后,培训过程将永远停止(也许Tensorboard等待永不结束的摘要操作?)。

经过一些研究,似乎问题出在依赖cuDNN实现的LSTM层。确实,当迫使Tensorflow退回到原始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和我们的库安装在不同的硬盘驱动器上是否可能导致此问题? (这是出现问题的设置的相似之处之一)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)