GPUを使用したテンソルフローでCUDNNLSTMを使用してモデルをトレーニングしました。推論のためにCPUでモデルを使用しようとすると、次のエラーが発生します。
Invalid argument: No OpKernel was registered to support Op 'CudnnRNN' with these attrs. Registered devices: [CPU], Registered kernels:
<no registered kernels>
[[Node: cudnn_lstm/CudnnRNN = CudnnRNN[T=DT_FLOAT, direction="bidirectional", dropout=0, input_mode="linear_input", is_training=false, rnn_mode="lstm", seed=87654321, seed2=4567](Reshape_1, cudnn_lstm/zeros, cudnn_lstm/zeros_1, cudnn_lstm/opaque_kernel/read)]]
では、このモデルをCPUでどのように使用できますか?
これが機能しない理由は、モデルアーキテクチャを含むJSONファイルがまだCuDNNLSTM用に構成されているためです。 KerasはCuDNNLSTMウェイトをLSTMアーキテクチャに自動的にロードできるようになりましたが、アーキテクチャが自動的に変更されることはありません。
これを修正するのは簡単です。jsonファイルを開き、CuDNNLSTM
のすべてのインスタンスをLSTM
に変更します。 JSONファイルを保存すると、.h5ファイルから重みをロードできるようになります。