Python 属性错误:';张量';对象没有属性'_keras#u历史';

Python 属性错误:';张量';对象没有属性'_keras#u历史';,python,keras,attributeerror,Python,Keras,Attributeerror,我查找了所有的“'Tensor'对象没有属性***”,但似乎没有一个与Keras相关(除了它没有帮助) 我正在制作一种GAN(生成性对抗网络)。在这里你可以找到结构 Layer (type) Output Shape Param # Connected to ______________________________________________________________

我查找了所有的“'Tensor'对象没有属性***”,但似乎没有一个与Keras相关(除了它没有帮助)

我正在制作一种GAN(生成性对抗网络)。在这里你可以找到结构

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]                    
_____________________________________________________________________________
我对模型2和模型3进行了预训练。问题是我用0和1组成的列表预先训练了model_2,但是model_1返回接近的值。因此,我考虑使用以下代码对model1\u输出进行舍入:model1\u输出上的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
[...]
我有以下错误:

AttributeError:“Tensor”对象没有属性“\u keras\u 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'
回溯(最近一次呼叫最后一次):
文件“C:\Users\Asmaa\Documents\BillyValuation\GFD.py”,第88行,在
GAN=使成为GAN(输入句子,G,F,D)
文件“C:\Users\Asmaa\Documents\BillyValuation\GFD.py”,第61行,make\u gan
GAN=模型(GAN_输入,GAN_输出)
文件“C:\ProgramData\Anaconda3\lib\site packages\keras\legacy\interfaces.py”,第88行,在包装器中
返回函数(*args,**kwargs)
文件“C:\ProgramData\Anaconda3\lib\site packages\keras\engine\topology.py”,第1705行,在\uuu init中__
构建图的图(x、完成的节点、进行中的节点)
文件“C:\ProgramData\Anaconda3\lib\site packages\keras\engine\topology.py”,第1695行,在图的构建图中
层、节点索引、张量索引)
文件“C:\ProgramData\Anaconda3\lib\site packages\keras\engine\topology.py”,第1695行,在图的构建图中
层、节点索引、张量索引)
文件“C:\ProgramData\Anaconda3\lib\site packages\keras\engine\topology.py”,第1665行,在图的构建图中
层,节点索引,张量索引=张量
AttributeError:“Tensor”对象没有属性“\u keras\u history”
我正在Windows7上使用Python3.6和Spyder3.1.4。上周我用pip升级了TensorFlow和Keras。 感谢您提供的任何帮助

试试这个:

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

@“Maëva LC”:我不能发表评论,这回答了你的
问题


但代码在没有行的情况下运行良好

model1\u out=(lambda x:K.round(x),output\u shape=…)(model1\u out)

没有别的了。无论如何,谢谢你的努力


函数
round()
是不可微的,因此梯度是无的。我建议您删除该行。

我的问题是在keras上使用“+”而不是“Add”,因为错误直接来自这里:

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)
回溯(最近一次呼叫最后一次):
文件“C:\Users\Asmaa\Documents\BillyValuation\GFD.py”,第88行,在
GAN=使成为GAN(输入句子,G,F,D)
文件“C:\Users\Asmaa\Documents\BillyValuation\GFD.py”,第61行,make\u gan
GAN=模型(GAN_输入,GAN_输出)
,并且模型的输入取决于以前模型的输出,我相信错误在于模型中的代码


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

tensorflow 1.x版支持此功能 您可能正在使用版本2.x

%tensorflow_版本1.x
在google colab中导入tensorflow之前,请使用上述tensorflow_版本魔法


这在jupyter笔记本中无效。请务必使用Google Colab

尝试将
K.round
放在
Lambda
层中。在keras中,层外操作并不常见。(虽然不确定这是问题所在)。@Daniel:使用
rounded=Lambda(Lambda x:K.round(x))(G_out)
F_out=F([GAN_-in,rounded])
,我可以“编译”,但不再“适合”。那么,新的错误是什么呢?(Lambda层通常需要一个
output_shape
。在您的情况下,x的形状是相同的)请记住,TensorFlow只支持Windows上的Python版本3.5.x:我说过,因为+运算符不能正常工作,您必须使用keras Insead的add方法,但是代码在没有
model1_out=Lambda行的情况下工作正常(lambda x:K.round(x),output_shape=…)(model1_out)
并且不涉及任何其他内容。无论如何,感谢您的尝试。我遇到了相同的问题,这就解决了它。我以前在代码中使用了“+”,在尝试创建模型之前它没有抛出错误。用keras的Add()替换“+”修复了这个问题。