我训练了一个使用CuDNNLSTM
单元格的 keras 模型,现在希望将模型加载到缺少 GPU 的主机设备上。CuDNNLSTM
但是,由于单元格需要 GPU,因此加载过程会爆炸,抛出:
没有注册任何 OpKernel 来支持具有这些属性的 Op 'CudnnRNN'。
是否有一些后门可以让我在没有 GPU 的主机上加载模型?任何建议都会非常有帮助!
注意:我使用的是 Keras 2.2.4 和 TensorFlow 1.12.0。我能够通过以下步骤解决问题:
1)用CudnnLSTM训练模型并保存模型(model_GPU.json)和权重(*.h5)。
2)为LSTM定义相同的模型改变CudnnLSTM,这必须在没有GPU的系统/计算机中完成,然后您可以保存模型(model_CPU.json)。
2*) 在 LSTM 单元集 activation='tanh',recurrent_activation='sigmoid'。因为这些是 CudnnLSTM 中的默认值。
3) 然后你可以用 CudnnLSTM 训练的权重加载 model_CPU.json。
具体来说,我使用了以下
中央处理器:
from keras.layers import LSTM
Bidirectional(LSTM(hidden_units_LSTM, return_sequences=True,activation='tanh',recurrent_activation='sigmoid'))(output)
Run Code Online (Sandbox Code Playgroud)
图形处理器:
from keras.layers import CuDNNLSTM
Bidirectional(CuDNNLSTM(hidden_units_LSTM, return_sequences=True))(output)
Run Code Online (Sandbox Code Playgroud)