1. ホーム
  2. python

[問題】Keras AttributeError: 'Tensor' オブジェクトに '_keras_history' という属性がない。

2022-02-16 20:56:18
<パス

質問

Kerasの関数型モデルにバックエンドの関数操作を追加するとエラーが発生します。

from keras import backend as K
...
input1 = Input(shape(2,))
input2 = Input(shape(3,))
output = K.concatenate([input1,input2], axis=-1)
model = Model(inputs=[input1,input2],outputs=output)
...

この時点で実行すると、エラーで爆発する

AttributeError: 'Tensor' object has no attribute '_keras_history'

この原因は、バックエンドがエラーに記載された _keras_history を含まない値を返す操作を行ったためと思われます。

解決方法

1. keras.layer.Concatenate レイヤー、または keras.layer.concatenate 関数 (これは本質的に Concatenate レイヤーへのインターフェースです) を使用して、上記の concatenate() などの Keras ラップレイヤーでバックエンド操作を実装します。
2. Lambdaレイヤーを使って操作をカプセル化する。先ほどと同じ操作で、以下のようなコードになります。

from keras.layers import Lambda
...
my_concat = Lambda(lambda x: K.concatenate([x[0],x[1]],axis=-1))
output = my_concat([input1,input2])
...