TransformerEncoder дает худшую производительность, если длина последовательности во время обучения отличается от вывода.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 TransformerEncoder дает худшую производительность, если длина последовательности во время обучения отличается от вывода.

Сообщение Anonymous »

Дано (это 600 будет использоваться для вывода): Размер словаря: Выполнениескользящего_окна из источника, возвращает (это 180 будет использоваться во время обучение): Поезд:

Код: Выделить всё

model = instantiate_untrained_model(seq_len=180)
model.fit(X_train, y_train)
Сохранить (только веса):

Код: Выделить всё

model.save_weights('trained.weights.h5')
Вывод с разницей seq_len:

Код: Выделить всё

# 600
model = instantiate_untrained_model(seq_len=600) # entire array
model.load_weights('trained.weights.h5') # No error
y_pred_600 = model.predict(X_infer)

# 180
model = instantiate_untrained_model(seq_len=180) # windowed array
model.load_weights('trained.weights.h5')
y_pred_180 = model.predict(X_train)
Построение прогноза y_pred_180 и его основная истина:
[img]https:/ /i.sstatic.net/0kHa9JlC.png[/img]

Построение прогноза y_pred_600 и его основная истина:
Изображение

Хотя это сигнал, но вы можете считать эту проблему именованной Распознавание объектов.
А вот модель keras:

Код: Выделить всё

  SEQ_LEN=seq_len
VOCAB_SIZE=128
EMBEDD_DIM=128

encoder_inputs = Input(shape=(SEQ_LEN,), name="encoder_inputs", dtype=np.uint8)
token_embeddings = Embedding(input_dim=VOCAB_SIZE, output_dim=EMBEDD_DIM)(encoder_inputs)
position_encodings = SinePositionEncoding()(token_embeddings)

# this line adds up the embeddings and fixes the problem
embeddings = token_embeddings + position_encodings

encoder_outputs = TransformerEncoder(intermediate_dim=EMBEDD_DIM*4, num_heads=2, dropout=0.05)(inputs=embeddings)

# Output layer for vocabulary size of 5
output_predictions = Dense(units=5, activation=None)(encoder_outputs)

# Final model
model = Model(encoder_inputs, output_predictions, name="transformer_encoder")
Я ожидаю, что во время вывода модель преобразователя сможет принимать произвольную длину последовательности с хорошей производительностью?
Почему это произошло? Есть ли связь с SinePositionEncoding или чем-то еще? Модель не является гибкой и ненадежной, она обеспечивает хорошую производительность только тогда, когда длина последовательности равна 180 вместо произвольной длины? Как я могу решить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-traini
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»