LSTM искажает прогнозы в сторону одного значения

#python #machine-learning #keras #nlp #lstm

#python #машинное обучение #keras #nlp #lstm

Вопрос:

Я пытаюсь обучить LSTM, за которым следует плотный слой в keras с числовыми входными последовательностями разной длины. диапазон чисел равен [1,13]. каждая из этих последовательностей заканчивается одним и тем же числом, 13 в моем случае.

Я обучаю контроллер нескольким последовательностям, использую обученную модель для генерации еще нескольких последовательностей с теми же свойствами, добавляю их в обучающий набор и снова обучаю LSTM. По мере продолжения этого цикла прогнозы LSTM начинают сходиться к конечному значению каждой последовательности.

Последовательности дополняются до определенной максимальной длины. в результате данные x_train имеют размер (None, max_len-1), а данные y_train являются категориальными данными последнего элемента каждой входной последовательности. в этом случае каждый элемент в данных y_train одинаков (один вектор горячего кодирования для числа 13).

  1. Является ли способ структурирования входных и выходных данных причиной такого искажения прогнозов?
  2. Есть ли способ обойти это?

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

1. Очень важный момент, который следует помнить, когда вы пытаетесь обучить модель машинного обучения. > Всегда должно быть более одного целевого / выходного / категориального класса для обучения. В вашем случае y_train одинаков во всех данных, поэтому модели машинного обучения нечего изучать. Было бы лучше, если бы вы могли подробнее описать, что именно вы пытаетесь сделать.

2. да, это то, к чему я тоже стремился. Я подумал, что мог бы использовать предпоследний элемент из последовательности вместо последнего. Это дало бы lstm большое разнообразие для изучения. Я также подумываю поэкспериментировать с оптимизаторами и их скоростью обучения, чтобы посмотреть, смогу ли я замедлить сходимость к конечному значению.

3. Я пытаюсь найти наилучшую архитектуру из всех возможных архитектур для нейронной сети только с плотными слоями. кодировка в последовательностях представляет тип слоя, которым она является. например: 1: Плотный (16, активация =’relu’), 2: Плотный (16, активация = ‘sigmoid’), 3: Плотный (32, активация = ‘relu’) и так далее и тому подобное. для данного набора данных последним слоем всегда является слой softmax с количеством узлов, равным целевым классам для данного набора данных, в моем случае 10 для mnist. я пытаюсь обучить lstm, который генерирует такие архитектуры в виде последовательностей.

4. Хорошо, я думаю, теперь я понял вашу точку зрения и то, что вы пытаетесь сделать. Для этой постановки задачи, тем не менее, подход, который вы используете, неверен, поскольку вы не указываете и не определяете целевую переменную, которая может сообщить lstm, каков конечный результат каждой из ваших архитектур. итак, вам нужно создать другую целевую переменную и использовать выходные данные вашей архитектуры, возможно, с диапазоном точности или, возможно, с потерями, это зависит.

5. также следует отметить еще одну важную вещь: хотите ли вы создать генеративную модель или прогнозирующую модель. В обоих случаях будет совершенно разный подход. судя по тому, как вы пишете код, он ориентирован на прогностическую модель, но из того, что вы описали в комментариях, также кажется, что вы хотите сделать это генеративным способом.