web-dev-qa-db-ja.com

AttributeError:「Tensor」オブジェクトには属性「_keras_history」がありません

すべての「 'Tensor'オブジェクトには属性がありません***」を探しましたが、Kerasに関連するものはありません( TensorFlow:AttributeError: 'Tensor'オブジェクトには属性 'log10' which does 'はありません) tヘルプ)...

私は一種のGAN(Generative Adversarial Networks)を作成しています。ここで構造を見つけることができます。

Layer (type)                     Output Shape          Param #         Connected to                     
_____________________________________________________________________________
input_1 (InputLayer)             (None, 30, 91)        0                                            
_____________________________________________________________________________
model_1 (Model)                  (None, 30, 1)         12558           input_1[0][0]                    
_____________________________________________________________________________
model_2 (Model)                  (None, 30, 91)        99889           input_1[0][0]                    
                                                                       model_1[1][0]                    
_____________________________________________________________________________
model_3 (Model)                  (None, 1)             456637          model_2[1][0]                    
_____________________________________________________________________________

Model_2とmodel_3を事前にトレーニングしました。問題は、0と1で構成されるリストを使用してmodel_2を事前トレーニングしましたが、model_1はアプローチした値を返します。そのため、model1_outのK.round()を使用して、model1_outputを丸めることを検討しました。

import keras.backend as K
[...]
def make_gan(GAN_in, model1, model2, model3):
    model1_out = model1(GAN_in)
    model2_out = model2([GAN_in, K.round(model1_out)])
    GAN_out = model3(model2_out)
    GAN = Model(GAN_in, GAN_out)
    GAN.compile(loss=loss, optimizer=model1.optimizer, metrics=['binary_accuracy'])
    return GAN
[...]

私は次のエラーがあります:

AttributeError:「Tensor」オブジェクトには属性「_keras_history」がありません

完全なトレースバック:

Traceback (most recent call last):
  File "C:\Users\Asmaa\Documents\BillyValuation\GFD.py", line 88, in <module>
GAN = make_gan(inputSentence, G, F, D)
  File "C:\Users\Asmaa\Documents\BillyValuation\GFD.py", line 61, in make_gan
GAN = Model(GAN_in, GAN_out)
  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\legacy\interfaces.py", line 88, in wrapper
return func(*args, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\topology.py", line 1705, in __init__
build_map_of_graph(x, finished_nodes, nodes_in_progress)
  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\topology.py", line 1695, in build_map_of_graph
layer, node_index, tensor_index)
  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\topology.py", line 1695, in build_map_of_graph
layer, node_index, tensor_index)
  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\topology.py", line 1665, in build_map_of_graph
layer, node_index, tensor_index = tensor._keras_history
AttributeError: 'Tensor' object has no attribute '_keras_history'

Windows 7でPython 3.6、Spyder 3.1.4を使用しています。先週、TensorFlowとKerasをpipでアップグレードしました。

14
Maëva LC

私の問題は、ケラスで「追加」ではなく「+」を使用することです

15
peikuo

エラーはここから直接来るので:

_Traceback (most recent call last):
  File "C:\Users\Asmaa\Documents\BillyValuation\GFD.py", line 88, in <module>
GAN = make_gan(inputSentence, G, F, D)
  File "C:\Users\Asmaa\Documents\BillyValuation\GFD.py", line 61, in make_gan
GAN = Model(GAN_in, GAN_out)
_

、モデルの入力は以前のモデルの出力に依存します。バグはモデルのコードにあると思います。

コードをモデル化する際には、特に最後の数行で非Keras操作を適用するかどうかを1行ずつ確認してください。たとえば、要素単位の加算では、_+_または_numpy.add_を直感的に使用できますが、代わりにkeras.layers.Add()を使用する必要があります。

12
Weisi Zhan

@ 'MaëvaLC':コメントを投稿できません。これはあなたのNone問題に答えます。

しかし、コードは行なしで正常に動作しています

model1_out = (lambda x: K.round(x), output_shape=...)(model1_out)

他には何もありません。とにかく、試してくれてありがとう。

関数round()は微分できないため、勾配はなしです。行を削除することをお勧めします。

4
陈家胜

これを試して:

def make_gan(GAN_in, model1, model2, model3):
    model1_out = model1(GAN_in)
    model1_out = Lambda(lambda x: K.round(x), output_shape=...)(model1_out)
    model2_out = model2([GAN_in, model1_out])
    GAN_out = model3(model2_out)
    GAN = Model(GAN_in, GAN_out)
    GAN.compile(loss=loss, optimizer=model1.optimizer, metrics=['binary_accuracy'])
    return GAN
1
Daniel Möller