kgu*_*lly 5 python keras keras-2
我试图将我的输入与 keras-2 函数 API 中的常量张量连接起来。在我的实际问题中,常量取决于设置中的某些参数,但我认为下面的示例显示了我得到的错误。
from keras.layers import*
from keras.models import *
from keras import backend as K
import numpy as np
a = Input(shape=(10, 5))
a1 = Input(tensor=K.variable(np.ones((10, 5))))
x = [a, a1] # x = [a, a] works fine
b = concatenate(x, 1)
x += [b] # This changes b._keras_history[0].input
b = concatenate(x, 1)
model = Model(a, b)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ValueError Traceback (most recent call last)
~/miniconda3/envs/ds_tools/lib/python3.6/site-packages/keras/engine/topology.py in assert_input_compatibility(self, inputs)
418 try:
--> 419 K.is_keras_tensor(x)
420 except ValueError:
~/miniconda3/envs/ds_tools/lib/python3.6/site-packages/keras/backend/theano_backend.py in is_keras_tensor(x)
198 T.sharedvar.TensorSharedVariable)):
--> 199 raise ValueError('Unexpectedly found an instance of type `' + str(type(x)) + '`. '
200 'Expected a symbolic tensor instance.')
ValueError: Unexpectedly found an instance of type `<class 'theano.gpuarray.type.GpuArraySharedVariable'>`. Expected a symbolic tensor instance.
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-2-53314338ab8e> in <module>()
5 a1 = Input(tensor=K.variable(np.ones((10, 5))))
6 x = [a, a1]
----> 7 b = concatenate(x, 1)
8 x += [b] # This changes b._keras_history[0].input
9 b = concatenate(x, 1)
~/miniconda3/envs/ds_tools/lib/python3.6/site-packages/keras/layers/merge.py in concatenate(inputs, axis, **kwargs)
506 A tensor, the concatenation of the inputs alongside axis `axis`.
507 """
--> 508 return Concatenate(axis=axis, **kwargs)(inputs)
509
510
~/miniconda3/envs/ds_tools/lib/python3.6/site-packages/keras/engine/topology.py in __call__(self, inputs, **kwargs)
550 # Raise exceptions in case the input is not compatible
551 # with the input_spec specified in the layer constructor.
--> 552 self.assert_input_compatibility(inputs)
553
554 # Collect input shapes to build layer.
~/miniconda3/envs/ds_tools/lib/python3.6/site-packages/keras/engine/topology.py in assert_input_compatibility(self, inputs)
423 'Received type: ' +
424 str(type(x)) + '. Full input: ' +
--> 425 str(inputs) + '. All inputs to the layer '
426 'should be tensors.')
427
ValueError: Layer concatenate_2 was called with an input that isn't a symbolic tensor. Received type: <class 'theano.gpuarray.type.GpuArraySharedVariable'>. Full input: [concatenate_1/input_3, concatenate_1/variable]. All inputs to the layer should be tensors.
Run Code Online (Sandbox Code Playgroud)
我正在2.0.5使用 theano 后端运行 keras 版本,以及 theano 版本0.10.0dev1。关于出了什么问题或更正确的方法来完成串联有什么想法吗?
keras 中的维度是这样工作的:
Keras 向您展示了 aNone来表示摘要、错误等中的批量大小。
这意味着:
您可以采取一些解决方法,例如创建形状为 (1,10,5) 的 a1,然后在批量维度中重复其值:
constant=K.variable(np.ones((1,10, 5)))
constant = K.repeat_elements(constant,rep=batch_size,axis=0)
Run Code Online (Sandbox Code Playgroud)
我完全无法使用,Input(tensor=...)因为常量的维度是固定的,而输入的维度是None,所以我用 lambda 层来解决它:
b = Lambda(lambda x: K.concatenate([x,constant],axis=1),output_shape=(20,5))(a)
Run Code Online (Sandbox Code Playgroud)
但我根本无法理解你想要实现什么x += [b]以及其余的。
| 归档时间: |
|
| 查看次数: |
4096 次 |
| 最近记录: |