我在GPU实例上训练了一个深度学习模型,以加速训练过程。但不幸的是,我们的产品实例只是CPU实例。当我试图使用GPU训练的模型与CuDNNGRU上只有CPU的实例,我得到了以下错误。
ValueError: CuDNNGRU is not compatible with GRU(reset_after=False)如果使用CuDNNLSTM,也会出现类似的错误。
ValueError: CuDNNLSTM is not compatible with LSTM(reset_after=False)发布于 2019-08-19 06:44:53
与其使用CuDNNGRU或CuDNNLSTM,不如使用普通GRU或LSTM,并使用以下选项
当CuDNNGRU或CuDNNLSTM模型对GPU进行训练时抛出错误的代码,而仅在CPU实例上进行推理。
CuDNNGRU
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-纯实例。
GRU
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')或
LSTM
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'选项,我的问题就解决了。
https://stackoverflow.com/questions/57551650
复制相似问题