AttributeError:'Tensor'对象没有属性'_keras_history'

Maë*_* LC 14 python attributeerror keras

我查找了所有"'Tensor'对象没有属性***"但似乎没有任何与Keras有关(除了TensorFlow:AttributeError:'Tensor'对象没有属性'log10'没有帮助)...

我正在制作一种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]                    
_____________________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

我预先训练了model_2和model_3.事情是我预先训练了model_2,列表由0和1组成,但是model_1返回了接近的值.所以我考虑使用以下代码舍入model1_output:model1_out上的K.round().

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
[...]
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

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'
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上使用Python 3.6和Spyder 3.1.4.我上周用pip升级了TensorFlow和Keras.感谢您提供的任何帮助!

小智 15

我的问题是在keras上使用'+'而不是'添加'


Wei*_*han 13

由于错误直接来自这里:

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)
Run Code Online (Sandbox Code Playgroud)

,模型的输入取决于以前模型的输出,我相信错误在于模型中的代码.

在您的型号代码中,请逐行检查是否应用非Keras操作,尤其是在最后几行中.例如,对于元素添加,您可能直观地使用+或甚至numpy.add,但keras.layers.Add()应该使用.

  • 我有同样的问题,这解决了它.我之前在代码中使用了"+",并且在我尝试创建模型之前它没有抛出错误.用keras'Add()替换"+"修复了问题. (2认同)

Dan*_*ler 1

尝试这个:

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
Run Code Online (Sandbox Code Playgroud)