AttributeError: 'Tenseur de l'objet n'a pas d'attribut "_keras_history'
J'ai regardé pour toutes les "Tenseur" objet n'a pas d'attribut ***", mais aucune ne semble liée à Keras (sauf pour TensorFlow: AttributeError: 'Tenseur de l'objet n'a pas d'attribut "log10' qui n'aide pas)...
Je fais une sorte de GAN (Générative Contradictoire Réseaux). Ici vous pouvez trouver la structure.
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]
_____________________________________________________________________________
Je pré-entraîné model_2, et model_3. Le truc c'est que je pré-entraîné model_2 avec liste de 0 et de 1, mais model_1 retour approché valeurs. J'ai donc considéré comme l'arrondissement le model1_output, avec le code suivant : le K. round() sur 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
[...]
J'ai l'erreur suivante :
AttributeError: 'Tenseur de l'objet n'a pas d'attribut "_keras_history'
Plein de sperme :
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'
Je suis à l'aide de Python 3.6, avec Spyder 3.1.4, sur Windows 7. J'ai mis à jour TensorFlow et Keras avec pip, la semaine dernière.
Merci pour toute aide !
K.round
à l'intérieur d'un Lambda
couche. Il n'est pas habitué à voir des opérations à l'extérieur des couches dans keras. (Pas sûr que c'est le problème, tout de même).avec
rounded = Lambda(lambda x: K.round(x))(G_out)
et F_out = F([GAN_in, rounded])
, je pourrais "compiler", mais pas plus.Alors, quelle est la nouvelle erreur? (Lambda couches normalement besoin d'un
output_shape
. Dans votre cas, de la même forme de x)Gardez à l'esprit que TensorFlow prend uniquement en charge la version 3.5.x de Python sur Windows: tensorflow.org/install/install_windows
J'ai dit que parce que l'opérateur + ne fonctionne pas correctement et vous devez utiliser la méthode add de keras de l'insead
OriginalL'auteur Maëva LC | 2017-07-03
Vous devez vous connecter pour publier un commentaire.
Mon problème est d'utiliser '+' pas 'Ajouter' sur keras
OriginalL'auteur peikuo
Puisque l'erreur vient directement à partir d'ici:
et les entrées de vos modèles s'appuient sur les résultats des modèles précédents, je crois que le bug se trouve dans le code de votre modèle.
Dans le modèle de code, veuillez vérifier ligne par ligne, si oui ou non vous appliquez un non-Keras opération, surtout dans les dernières lignes. Par exemple ,pour l'élément-sage outre, vous pouvez intuitivement utiliser
+
ou mêmenumpy.add
, maiskeras.layers.Add()
devrait être utilisé à la place.OriginalL'auteur Weisi Zhan
@'Maëva LC': je ne peux pas poster un commentaire, ce qui répond à votre
None
question.Fonction
round()
n'est pas dérivable, d'où le gradient est nul. Je vous suggère de simplement supprimer la ligne.OriginalL'auteur 陈家胜
Essayez ceci:
ValueError: None values not supported.
erreur...Alors qu'il est quelque part ailleurs dans le code.
mais le code fonctionne très bien sans la ligne
model1_out = Lambda(lambda x: K.round(x), output_shape=...)(model1_out)
et de ne pas toucher quoi que ce soit d'autre. De toute façon, merci d'avoir essayé.OriginalL'auteur Daniel Möller