Объединить тензор[Нет, 192] с тензором [1,128]

#python #tensorflow #keras #neural-network #tensor

Вопрос:

Как объединить тензоры фигур [Нет, 128] с тензором [1,128]. Здесь первый тензор будет содержать некоторые данные неизвестной длины, а второй тензор является фиксированным тензором, не зависящим от размера данных. Конечный результат должен иметь форму[Нет, 328]. Это часть объединения нейронных сетей.

Я пытался

 gt; c = Concatenate(axis = -1, name = 'DQN_Input')([ a, b])  

Здесь a.форма = (Нет, 192) и b.форма = (1,128) Но это не работает. Ошибка в том, что

Ошибка значения: Concatenate Для слоя требуются входные данные с соответствующими формами, за исключением оси объединения. Есть входные формы: [(Нет, 192), (1, 128)]

Комментарии:

1. Какое сообщение об ошибке вы получаете? Пожалуйста, добавьте это в свой вопрос

2. Добавлена ошибка.

Ответ №1:

Что вы можете сделать, так это использовать tf.repeat на b основе первого измерения a для создания одного и того же тензора формы. Вот простой рабочий пример:

 import tensorflow as tf  a = tf.keras.layers.Input((192, ), name = 'a') alpha = tf.keras.layers.Input((1,),name = 'Alpha') b = tf.matmul(alpha, a, transpose_a=True) b = tf.repeat(b, repeats=tf.shape(a)[0], axis=0) c = tf.keras.layers.Concatenate(axis = -1, name = 'DQN_Input')([ a, b]) model = tf.keras.Model([a, alpha], c) tf.print(model((tf.random.normal((5, 192)), tf.random.normal((5, 1)))).shape)  
 TensorShape([5, 384])  

Комментарии:

1. это не работает. Форма остается прежней. Я также попробовал tf.reshape(b, (a.get_shape()[0], b.get_shape()[1])), так как это слой тензорного потока. Я получаю ошибку TypeError: Не удалось преобразовать объект типа lt;класс ‘кортеж’gt; в тензор. Содержание: (Нет, 128). Рассмотрите возможность приведения элементов к поддерживаемому типу.

2. Можете ли вы опубликовать, где именно вы пытаетесь объединить ? Я понимаю, что a это часть вашей сети, но откуда b она берется?

3. На самом деле b-это как взвешенная комбинация партии. (например, среднее значение ввода a) b = Точка(оси = 1, имя = ‘Fleet_Context’)([alpha_K, a]) Здесь alpha_K.форма = (Нет,1), то есть это вектор размером, равным размеру пакета

4. Умножение матрицы нормально, но основная проблема та же, что и форма b (1,128). Объединение не работает

5. Не могли бы вы, пожалуйста, добавить соответствующий код к вашему вопросу, в том числе о том, как вы создаете alpha_K?