python - 无法使用在 GPU 实例上训练的深度学习 RNN 模型来推断仅 CPU 实例
问题描述
我在 GPU 实例上训练了一个深度学习模型以加快训练过程。但不幸的是,我们的产品实例是纯 CPU 实例。当我尝试在纯 CPU 实例上使用带有 CuDNNGRU 的 GPU 训练模型时,出现以下错误。
ValueError: CuDNNGRU is not compatible with GRU(reset_after=False)
如果您使用 CuDNNLSTM,您会遇到类似的错误
ValueError: CuDNNLSTM is not compatible with LSTM(reset_after=False)
解决方案
不要使用 CuDNNGRU 或 CuDNNLSTM,而是使用带有以下选项的普通 GRU 或 LSTM
当在 GPU 上训练的 CuDNNGRU 或 CuDNNLSTM 模型在仅 CPU 实例上推理时抛出错误时抛出错误的代码。
库登格鲁
if tf.test.is_gpu_available():
return tf.keras.layers.CuDNNGRU(units,
return_sequences=True,
return_state=True,
recurrent_initializer='glorot_uniform')
else:
return tf.keras.layers.GRU(units,
return_sequences=True,
return_state=True,
recurrent_initializer='glorot_uniform')
或者
CuDNNLSTM
if tf.test.is_gpu_available():
return tf.keras.layers.CuDNNLSTM(units,
return_sequences=True,
return_state=True,
recurrent_initializer='glorot_uniform')
else:
return tf.keras.layers.LSTM(units,
return_sequences=True,
return_state=True,
recurrent_initializer='glorot_uniform')
请使用以下代码,以便您可以使用经过 GPU 训练的模型对仅 CPU 实例进行推理。
格鲁乌
if tf.test.is_gpu_available():
return tf.compat.v1.keras.layers.CuDNNGRU(units,
return_sequences=True,
return_state=True,
recurrent_initializer='glorot_uniform')
else:
return tf.keras.layers.GRU(units,
return_sequences=True,
return_state=True,
recurrent_activation='sigmoid',
reset_after='True',
recurrent_initializer='glorot_uniform')
或者
长短期记忆体
if tf.test.is_gpu_available():
return tf.compat.v1.keras.layers.CuDNNLSTM(units,
return_sequences=True,
return_state=True,
recurrent_initializer='glorot_uniform')
else:
return tf.keras.layers.LSTM(units,
return_sequences=True,
return_state=True,
recurrent_activation='sigmoid',
reset_after='True',
recurrent_initializer='glorot_uniform')
因此,只需使用reset_after=True和recurrent_activation='sigmoid'选项,我的问题就解决了。
推荐阅读
- javascript - 在 vue.js 中将范围输入打印到 html 中
- javascript - Bootstrap5 模态未显示
- java - OpenGL 永远不会恢复到默认的 FrameBuffer
- docker - Jenkins SSH 管道步骤 - 需要终端才能读取密码
- python - 对数据框列求和会产生意外的输出
- sql - 使用 EXIST 语句仅显示存在于两个数据池中的值
- azure - 为什么我的管道在运行 webpack 时突然超时?
- python - 如何从具有另一列的一列中选择值并在 Python 中为每个用户执行此操作?
- logback - 将日志记录器字段写入 application.yaml
- android - 为什么 getAppWidgetInfo 有时会返回 null?