Ik heb gezocht naar alle “‘Tensor’-objecten hebben geen attribuut ***” maar geen enkele lijkt gerelateerd aan Keras (behalve TensorFlow: AttributeError: ‘Tensor’-object heeft geen kenmerk ‘log10’wat niet hielp)…
Ik maak een soort GAN (Generative Adversarial Networks). Hier vind je de structuur.
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]
_____________________________________________________________________________
Ik heb model_2 en model_3 vooraf getraind. Het punt is dat ik model_2 vooraf heb getraind met een lijst gemaakt van 0 en 1, maar model_1 retourneerde waarden. Dus ik overwoog om de model1_output af te ronden, met de volgende code: de K.round() op 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
[...]
Ik heb de volgende foutmelding:
AttributeError: ‘Tensor’-object heeft geen kenmerk ‘_keras_history’
Volledige 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'
Ik gebruik Python 3.6, met Spyder 3.1.4, op Windows 7. Ik heb vorige week TensorFlow en Keras geüpgraded met pip.
Bedankt voor alle hulp!
Antwoord 1, Autoriteit 100%
Mijn probleem gebruikte ‘+’ in plaats van ‘toe te voegen’ op Keras
Antwoord 2, Autoriteit 57%
Omdat de fout vanaf hier rechtstreeks komt:
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)
, en de ingangen van uw modellen zijn afhankelijk van de uitgangen van eerdere modellen, ik geloof dat de bug in de codes in uw model ligt.
In uw modelcode, controleer regel op regel of u een niet-keras-bediening toepast, vooral in de laatste paar regels. Voor element-wise toevoeging kunt u bijvoorbeeld intuïtief gebruiken +
of zelfs numpy.add
, maar keras.layers.Add()
zou moeten in plaats daarvan worden gebruikt.
Antwoord 3, Autoriteit 17%
@ ‘Maëva lc’: ik kan geen commentaar plaatsen, dit beantwoordt je None
probleem.
Maar de code werkt prima zonder de lijn
model1_out = (lambda x: K.round(x), output_shape=...)(model1_out)
en niet iets anders. Hoe dan ook, bedankt voor het proberen.
Functie round()
is niet differentieerbaar, vandaar dat de gradiënt geen is. Ik stel voor dat u gewoon de lijn verwijdert.
Antwoord 4, Autoriteit 4%
Probeer dit:
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
Antwoord 5
Dit wordt ondersteund in TensorFlow-versies 1.x
U gebruikt versie 2.x waarschijnlijk.
% TensorFlow_version 1.x
Gebruik de bovenstaande TensorFlow_Version-magie voordat u TensorFlow importeert in Google Colab.
Dit is niet geldig in Jupyter-Notebook. Gebruik Google Colab