От многомерного массива к другой форме в Керасе

#python #tensorflow #keras

Вопрос:

У меня есть 4 входа с формой (batch_train, 128, 30000) . Я хочу иметь в качестве вывода слой softmax со всеми 4 входами. Это мой код:

 inp1.shape = (batch_train, 128, 30000) inp2.shape = (batch_train, 128, 30000) inp3.shape = (batch_train, 128, 30000) inp4.shape = (batch_train, 128, 30000)   conc = tf.keras.layers.Concatenate(axis=0)([inp1[tf.newaxis], inp2[tf.newaxis], inp3[tf.newaxis], inp4[tf.newaxis]]) dense = tf.keras.layers.Dense(num_x)(concat) drp= tf.keras.layers.Dropout(0.1)(dense) output = tf.keras.layers.Dense(4)(drp)  

Однако моя форма вывода такова (4, batch_train, 128, 30000, 4) . Мой желаемый результат таков (train_batch, 4) . Что я делаю не так?

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

1. Какую форму вывода вы ожидаете? И почему вы объединяетесь вдоль оси партии?

2. @AloneTogether Я ожидаю выхода softmax в форме (batch_train, 4) . Я добавил новую ось для добавления всех 4 входов. По крайней мере, таково мое намерение, вероятно, не совсем удачно исполненное

Ответ №1:

Я не уверен, на какой оси вы хотите объединить, но вам придется выровнять свой тензор, если вы хотите получить 1D-вывод:

 import tensorflow as tf  inp1 = tf.keras.layers.Input((128, 5)) inp2 = tf.keras.layers.Input((128, 5)) inp3 = tf.keras.layers.Input((128, 5)) inp4 = tf.keras.layers.Input((128, 5))  conc = tf.keras.layers.Concatenate(axis=1)([inp1, inp2, inp3, inp4]) flatten = tf.keras.layers.Flatten()(conc) dense = tf.keras.layers.Dense(100)(flatten) drp= tf.keras.layers.Dropout(0.1)(dense) output = tf.keras.layers.Dense(4)(drp) model = tf.keras.Model([inp1, inp2, inp3, inp4], output)  batch_size = 5 inputs1, inputs2, inputs3, inputs4 = tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5)), tf.random.normal((5, 128, 5)) print(model([inputs1, inputs2, inputs3, inputs4]).shape)  
 (5, 4)  

Однако вы, вероятно, столкнетесь с ошибкой «Не хватает памяти» при использовании таких больших входных форм.

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

1. Спасибо! Потеряю ли я информацию при объединении всех входных данных вместе?

2. Хороший вопрос, да, вы можете потерять некоторую информацию.