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

时间:2017-07-03 15:22:21

标签: python keras attributeerror

我找了所有"' Tensor'对象没有属性***"但似乎没有一个与Keras相关(除了TensorFlow: AttributeError: 'Tensor' object has no attribute '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]                    
_____________________________________________________________________________

我预先训练了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
[...]

我有以下错误:

  

属性错误:' 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'

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

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:10)

由于错误直接来自此处:

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)

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

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

答案 2 :(得分:4)

@'MaëvaLC':我无法发表评论,这可以解答您的None问题。

  

但代码在没有行

的情况下工作正常      

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

     

而不是其他任何东西。无论如何,谢谢你的尝试。

函数round()不可微分,因此渐变为None。我建议你删除该行。

答案 3 :(得分: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

答案 4 :(得分:0)

tensorflow 1.x 版本支持 您可能使用的是 2.x 版。

%tensorflow_version 1.x
在 google colab 中导入 tensorflow 之前使用上面的 tensorflow_version 魔法。

这在 jupyter-notebook 中无效。请务必使用 Google Colab