Первый аргумент tf.concat должен быть списком тензоров, а второй - осью, по которой происходит конкатенация. Вы можете объединить тензоры img
и temp
следующим образом:
import tensorflow as tf
img = tf.ones(shape=(128, 128, 3))
temp = tf.get_variable("temp", [1, 128, 3], dtype=tf.float32)
img = tf.concat([img, temp], axis=0)
with tf.Session() as sess:
print(sess.run(tf.shape(img)))
ОБНОВЛЕНИЕ: Здесь у вас есть минимальный пример, показывающий, почему вы получаете ошибку «AttributeError: объект Tensor» не имеет атрибута «_keras_history» ». Эта ошибка появляется в следующем фрагменте:
from keras.layers import Input, Lambda, Dense
from keras.models import Model
import tensorflow as tf
img = Input(shape=(128, 128, 3)) # Shape=(batch_size, 128, 128, 3)
temp = Input(shape=(1, 128, 3)) # Shape=(batch_size, 1, 128, 3)
concat = tf.concat([img, temp], axis=1)
print(concat.get_shape())
dense = Dense(1)(concat)
model = Model(inputs=[img, temp], outputs=dense)
Это происходит потому, что тензор concat
не является тензором Кераса, и поэтому некоторые из типичных атрибутов тензоров Кераса (например, _keras_history
) отсутствуют. Чтобы преодолеть эту проблему, вам нужно заключить все тензоры TensorFlow в слой Keras Lambda :
from keras.layers import Input, Lambda, Dense
from keras.models import Model
import tensorflow as tf
img = Input(shape=(128, 128, 3)) # Shape=(batch_size, 128, 128, 3)
temp = Input(shape=(1, 128, 3)) # Shape=(batch_size, 1, 128, 3)
concat = Lambda(lambda x: tf.concat([x[0], x[1]], axis=1))([img, temp])
print(concat.get_shape())
dense = Dense(1)(concat)
model = Model(inputs=[img, temp], outputs=dense)