[英]keras concatenate along dimension 0 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)
我不明白。 我没有正确使用“轴”参数吗? 当axis=-1 时,张量将沿着最后一个维度正确连接。
谢谢。
好的,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})
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})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.