2
9

More than 5 years have passed since last update.

plaidMLの落とし穴

Posted at

plaidMLでKerasのコードをそのまま実行

TypeError: Failed to convert object of type <class 'plaidml.tile.Value'> to Tensor. Contents: Tanh FLOAT32(<tile.Value Operation UINT64()>, 64). Consider casting elements to a supported type.

こんなエラーが出ることがあります。よくあるのが

layer = Lambda(lambda x: tf.sqrt(x))(prev_layer)

こんな感じでKerasのLambda内部でTensorflowのメソッドを直接使っている場合です。plaidMLが定義しているクラスのインスタンスをTensorflowのメソッドの引数にしたらクラスが違うのだからそりゃダメだよね、という事で

import keras.backend as K
layer = Lambda(lambda x: K.sqrt(x))(prev_layer)

kerasのバックエンドメソッドを利用しましょう。これらのメソッドはplaidML側で受け皿がちゃんと用意されているようです。
ただし、Tensorflowの豊富なメソッドが全てバックエンド関数で使える訳ではないので工夫が必要になることも多いです。

2
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
9