Я полагаюсь на несколько слоев Keras Reshape, но не могу проверить, работают ли они вместе правильно.Я начинаю с предварительно обработанного тензора (BatchSize, 50, 100, 300).Где 5 новостных статей в день в течение 10 дней (50) представлены 100 словами, причем каждое слово представлено 300-мерным встроенным вектором.
Я перекраиваю эту структуру несколько раз, чтобы привести данные в соответствие с различными слоями, которые я использую.Например, я изменяю форму (BatchSize, 50, 100, 300) на (BatchSize, 5000, 300) для подачи 300-мерных векторов слова через распределенный по времени слой, чтобы кодировать каждое слово отдельно.Затем я изменяю полученный результат (BatchSize, 5000, 10) на (BatchSize, 50, 100, 10).В этом случае, уничтожил ли я связь между 50 новостными статьями и их 100 словами?Или Reshape позаботится об этом?
https://www.tensorflow.org/api_docs/python/tf/keras/layers/Reshape
Я изучил документацию, но не смог найти ответ.Я также искал через переполнение стека.Я начинаю думать, что это то, что все предполагают, что это правда (и, вероятно, так), но я должен быть уверен на 100%.
from keras.layers import Input, Dense, LSTM, TimeDistributed, Dropout, Reshape
from keras.models import Model
newsInput = Input(shape=(input_length, 100, 300))
#News Input pathway
#Reshape intp a format which TimeDistributed will accept. (flatten the layers I want to keep seperate)
newsInput2 = Reshape([input_length*100, 300])(newsInput)
#Encode each word from a 300 dimensional vector to a 10 dimensional vector.
x = TimeDistributed(Dense(10, input_shape=(300,), activation='tanh'), input_shape=(input_length*100, 300))(newsInput2)
print("x shape", x.shape)
#Reshape intp a format which TimeDistributed will accept. (flatten the layers I want to keep seperate)
x = Reshape([input_length, 100, 10])(x)
x = Reshape([input_length, 100*10])(x)
#encode each news article into a 10 dimensional vector.
x = TimeDistributed(Dense(10, input_shape=(1000,), activation='tanh'), input_shape=(input_length, 1000))(x)
# output = TimeDistributed(LSTM(10, return_sequences= False, input_shape=(100, 10), activation='tanh'), input_shape=(input_length, 100, 10))(x)
print("x", x.shape)
output = LSTM(10, activation="relu", input_shape=(50, 10))(x)
model = Model(inputs=newsInput, outputs=output)
model.summary()
Я запустил его без ошибок.Но все еще не уверен, что множественные изменения поддерживали интеграцию данных.
Слой (тип) Выходная форма Параметр #
input_2 (InputLayer) (Нет, 50, 100, 300) 0
reshape_1 (Reshape)(Нет, 5000, 300) 0
time_distributed_1 (TimeDist (Нет, 5000, 10) 3010
reshape_2 (Reshape) (Нет, 50, 100, 10)0
reshape_3 (Reshape) (Нет, 50, 1000) 0
time_distributed_2 (TimeDist (Нет, 50, 10) 10010
lstm_1 (LSTM) (Нет, 10) 840
Всего параметров: 13 860 Обучаемых параметров: 13 860 Необучаемых параметров: 0