问题
I looked for all the "'Tensor' object has no attribute ***" but none seems related to Keras (except for TensorFlow: AttributeError: 'Tensor' object has no attribute 'log10' which didn't help)...
I am making a sort of GAN (Generative Adversarial Networks). Here you can find the 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]
_____________________________________________________________________________
I pretrained model_2, and model_3. The thing is I pretrained model_2 with list made of 0 and 1, but model_1 return approached values. So i considered rounding the model1_output, with the following code : the K.round() on 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
[...]
I have the following error :
AttributeError: 'Tensor' object has no attribute '_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'
I'm using Python 3.6, with Spyder 3.1.4, on Windows 7. I upgraded TensorFlow and Keras with pip last week. Thank you for any help provided !
回答1:
My problem is use '+' not 'Add' on keras
回答2:
Since the error comes directly from here:
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)
, and the inputs of your models depend on the outputs from previous models, I believe the bug lies in the codes in your model.
In you model code, please check line by line whether or not you apply a non-Keras operation, especially in the last few lines. For example ,for element-wise addition, you might intuitively use +
or even numpy.add
, but keras.layers.Add()
should be used instead.
回答3:
@'Maëva LC': I can't post a comment, this answers your None
issue.
but the code is working fine without the line
model1_out = (lambda x: K.round(x), output_shape=...)(model1_out)
and not anything else. Anyway, thank you for trying.
Function round()
is not differentiable, hence the gradient is None. I suggest you just remove the line.
回答4:
Try this:
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
来源:https://stackoverflow.com/questions/44889187/attributeerror-tensor-object-has-no-attribute-keras-history