keras конкатенировать по измерению 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)

Я не понимаю. Я неправильно использую параметр оси? С осью =-1 тензоры будут правильно объединены по последнему измерению.

Спасибо.


person Fangzhou Zhai    schedule 17.12.2017    source источник


Ответы (2)


хорошо, 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})
person Fangzhou Zhai    schedule 17.12.2017

Keras ожидает, что выходной размер_пакета будет таким же, как и входной размер_пакета. batch_size всегда является первым измерением, которое в данном случае равно 1.

Таким образом, общая стратегия заключается в использовании tf.expand_dims для добавления первого измерения 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)
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})
person Sanjay    schedule 05.04.2020