Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras:张量对象没有属性_keras“历史”;_Python_Tensorflow_Keras - Fatal编程技术网

Python Keras:张量对象没有属性_keras“历史”;

Python Keras:张量对象没有属性_keras“历史”;,python,tensorflow,keras,Python,Tensorflow,Keras,前面问题的大多数答案都建议将有问题的张量包装在Lambda层中。然而,我已经这样做了(并尝试了许多修改),它仍然抛出相同的错误。 当前模型定义的伪代码如下所示: #[为简单起见,此处未显示以前的模型定义层] out_持续时间=重塑((30,3))(out_持续时间) out_位置=重塑((30,3))(out_位置) low=tf.constant([(30x3)numpy数组的下限)])#不能在这里使用K.clip,因为每个元素的下限都不同 high=tf.常量([(30x3)numpy上界数

前面问题的大多数答案都建议将有问题的张量包装在
Lambda
层中。然而,我已经这样做了(并尝试了许多修改),它仍然抛出相同的错误。 当前模型定义的伪代码如下所示:

#[为简单起见,此处未显示以前的模型定义层]
out_持续时间=重塑((30,3))(out_持续时间)
out_位置=重塑((30,3))(out_位置)
low=tf.constant([(30x3)numpy数组的下限)])#不能在这里使用K.clip,因为每个元素的下限都不同
high=tf.常量([(30x3)numpy上界数组)])
裁剪出的位置=Lambda(Lambda x:tf.clip_by_value(*x),输出形状=裁剪出的位置。获取形状()。作为列表())([out_位置,低,高])
模型=模型(输入=x,输出=[输出持续时间,剪裁位置]
错误输出:

文件“multitask_inverter.py”,第107行,输入
main()
文件“multitask_inverter.py”,第75行,主目录
模型=模型(输入=x,输出=[输出持续时间,剪裁位置])
文件“/om/user/lnj/openmind_env/tensorflow gpu/lib/python3.5/site packages/keras/legacy/interfaces.py”,第88行,在包装器中
返回函数(*args,**kwargs)
文件“/om/user/lnj/openmind_env/tensorflow gpu/lib/python3.5/site packages/keras/engine/topology.py”,第1705行,在_init中__
构建图的图(x、完成的节点、进行中的节点)
文件“/om/user/lnj/openmind_env/tensorflow gpu/lib/python3.5/site packages/keras/engine/topology.py”,第1695行,内置图
层、节点索引、张量索引)
文件“/om/user/lnj/openmind_env/tensorflow gpu/lib/python3.5/site packages/keras/engine/topology.py”,第1665行,内置图
层,节点索引,张量索引=张量
AttributeError:“Tensor”对象没有属性“\u keras\u history”

您可以使用
Lambda(…,参数={'low':low,'high':high})向层提供
low
high
。从
Lambda
的文档中:

参数:要传递给的关键字参数的可选字典 功能

比如说,

clipped_out_position = Lambda(lambda x, low, high: tf.clip_by_value(x, low, high),
                              arguments={'low': low, 'high': high})(out_position)

编辑:

下面是关于测试此层的更完整示例:

x = Input(shape=(100,))
out_duration = Dense(90)(x)
out_position = Dense(90)(x)
out_duration = Reshape((30, 3))(out_duration)
out_position = Reshape((30, 3))(out_position)

low = tf.constant(np.random.rand(30, 3).astype('float32'))
high = tf.constant(1 + np.random.rand(30, 3).astype('float32'))
clipped_out_position = Lambda(lambda x, low, high: tf.clip_by_value(x, low, high),
                              arguments={'low': low, 'high': high})(out_position)

model = Model(inputs=x, outputs=[out_duration, clipped_out_position])
model.compile(loss='mse', optimizer='adam')
model.fit(np.random.rand(5000, 100), [np.random.rand(5000, 30, 3), np.random.rand(5000, 30, 3)])

这会导致
ValueError:没有为“lambda_1”提供数据。需要每个输入的数据:['out\u duration','lambda\u 1']
--我不完全确定这里发生了什么。我想你需要发布更多的代码。新问题并非来自您发布的代码。您的模型看起来怎么样?您如何调用
fit()
?我已经添加了一个关于如何使用这一行的示例网络。你能把它和你的网络比较一下,看看是否有什么不同吗?在我看来,您的错误与原来的问题不同,因为它是由
fit()
引发的错误,而不是模型构造。太棒了,它可以工作!你能解释一下为什么添加
参数
param是解决这个问题的正确方法吗?我认为这是因为
不是Keras张量。Keras张量在
\u Keras\u history
中记录一些拓扑信息。当在模型构建过程中找不到信息时,您将看到类似这样的错误。要将不是Keras层输出的内容传递给
Lambda
层,可以使用
arguments
参数。