Поддерживает ли Keras Reshape структуру данных и порядок через несколько измененных слоев туда-сюда? - PullRequest
1 голос
/ 29 мая 2019

Я полагаюсь на несколько слоев 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


...