it-swarm.com.de

AttributeError: 'Tensor'-Objekt hat kein Attribut' _keras_history '

Ich suchte nach allen "Tensor" -Objekten hat kein Attribut *** ", aber keines scheint mit Keras verwandt zu sein (mit Ausnahme von TensorFlow: AttributeError:" Tensor "-Objekt hat kein Attribut" log10 " , was nicht geholfen hat) ...

Ich mache eine Art GAN (Generative Adversarial Networks). Hier finden Sie die Struktur.

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]                    
_____________________________________________________________________________

Ich trainierte model_2 und model_3. Die Sache ist, dass ich model_2 mit einer Liste von 0 und 1 vorab trainiert habe, aber model_1 die angefahrenen Werte zurückgibt. Ich überlegte, das model1_output mit dem folgenden Code zu runden: das K.round () auf model1_out.

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
[...]

Ich habe den folgenden Fehler:

AttributeError: 'Tensor'-Objekt hat kein Attribut' _keras_history '

Full Traceback:

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'

Ich verwende Python 3.6 mit Spyder 3.1.4 unter Windows 7. Ich habe letzte Woche TensorFlow und Keras mit pip aufgerüstet .. Vielen Dank für jede Hilfe!

7
Maëva LC

Mein Problem ist "+" und nicht "Hinzufügen" für Keras

11
peikuo

Da kommt der Fehler direkt von hier:

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)

Die Eingaben Ihrer Modelle hängen von den Ausgaben der Vorgängermodelle ab. Ich glaube, der Fehler liegt in den Codes in Ihrem Modell.

Überprüfen Sie in Ihrem Modellcode Zeile für Zeile, ob Sie eine Nicht-Keras-Operation anwenden, insbesondere in den letzten Zeilen. Beispielsweise können Sie für die elementweise Hinzufügung intuitiv + oder sogar numpy.add verwenden. Stattdessen sollte keras.layers.Add() verwendet werden.

5
Weisi Zhan

@ 'Maëva LC': Ich kann keinen Kommentar hinterlassen, dies beantwortet Ihr Problem mit None.

aber der Code funktioniert gut ohne die Linie

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

und sonst nichts. Trotzdem danke, dass du es versucht hast.

Funktion round() ist nicht differenzierbar, daher ist der Gradient None. Ich schlage vor, Sie entfernen nur die Linie.

4
陈家胜

Versuche dies:

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