keras沿维度0 valueerror连接

时间:2017-12-17 21:17:07

标签: python neural-network keras concatenation valueerror

所以我试图连接两个keras张量:

a = keras.layers.Input(shape=[5,], dtype='float', name='a')
b = keras.layers.Input(shape=[5,], dtype='float', name='b')
s = keras.layers.concatenate([a, b], axis=0)
model = keras.models.Model(inputs=[a, b], outputs=s)

aa = np.array([[1,1,1,1,1]])
bb = np.array([[3,3,3,3,3]])

cc = model.predict({'a':aa, 'b':bb})

我得到的是:

Traceback (most recent call last):File"D:\Anaconda3\envs\kerase\lib\sitepackages\IPython\core\interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-64-ddbf264b3bdb>", line 50, in <module>
cc = model.predict({'a':aa, 'b':bb})
File "D:\Anaconda3\envs\kerase\lib\site-packages\keras\engine\training.py", line 1713, in predict
verbose=verbose, steps=steps)
File "D:\Anaconda3\envs\kerase\lib\site-packages\keras\engine\training.py", line 1278, in _predict_loop
outs[i][batch_start:batch_end] = batch_out

ValueError:无法将形状(2,5)的输入数组广播为形状(1,5)

我不明白。我没有使用&#39;轴&#39;参数适当吗?当轴= -1时,张量将在最后一个维度上正确连接。

感谢。

2 个答案:

答案 0 :(得分:0)

好的,2级-1张量只能以一种可能的方式连接。这有效:

a = keras.layers.Input(shape=[1, 5], dtype='float', name='a')
b = keras.layers.Input(shape=[1, 5], dtype='float', name='b')
s = keras.layers.concatenate([a, b], axis=-2)

model = keras.models.Model(inputs=[a, b], outputs=s)

aa = np.array([[[1,1,1,1,1]]])
bb = np.array([[[3,3,3,3,3]]])

cc = model.predict({'a':aa, 'b':bb})

答案 1 :(得分:0)

Keras期望输出batch_size与输入batch_size相同。 在这种情况下,batch_size始终是第一个维度,为1。

因此,一种常见的策略是使用tf.expand_dims将第一个维度1添加为batch_size。这是修改后的代码,将起作用。

a = keras.layers.Input(shape=[1, 5], dtype='float', name='a')
b = keras.layers.Input(shape=[1, 5], dtype='float', name='b')
s = keras.layers.concatenate([a, b], axis=-2)
f = tf.expand_dims(concated, axis=0)

model = keras.models.Model(inputs=[a, b], outputs=f)

aa = np.array([[1,1,1,1,1]])
bb = np.array([[3,3,3,3,3]])

cc = model.predict({'a':aa, 'b':bb})