Понимание эпохи, размера пакета, точности и прироста производительности в модели прогнозирования lstm

#tensorflow #machine-learning #keras #neural-network #lstm

#tensorflow #машинное обучение #keras #нейронная сеть #lstm

Вопрос:

Я новичок в машинном обучении и lstm. Я ссылаюсь на эту ссылку LSTM для многошагового прогнозирования для модели LSTM кодировщика-декодера с многомерным разделом ввода.

Вот мое описание набора данных после изменения формы набора данных и тестов.

 print(dataset.shape)
print(train_x.shape, train_y.shape)
print((test.shape)

(2192, 15)
(1806, 14, 14) (1806, 7, 1)
(364, 15)
  

В приведенном выше у меня есть n_input=14, n_out=7 .

Вот мое описание модели lstm:

 def build_model(train, n_input):
    # prepare data
    train_x, train_y = to_supervised(train, n_input)
    # define parameters
    verbose, epochs, batch_size = 2, 100, 16
    n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]
    # reshape output into [samples, timesteps, features]
    train_y = train_y.reshape((train_y.shape[0], train_y.shape[1], 1))
    # define model
    model = Sequential()
    model.add(LSTM(200, activation='relu', input_shape=(n_timesteps, n_features)))
    model.add(RepeatVector(n_outputs))
    model.add(LSTM(200, activation='relu', return_sequences=True))
    model.add(TimeDistributed(Dense(100, activation='relu')))
    model.add(TimeDistributed(Dense(1)))
    model.compile(loss='mse', optimizer='adam')
    # fit network
    model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, verbose=verbose)
    return model
  

При оценке модели я получаю результат в виде:

 Epoch 98/100
 - 8s - loss: 64.6554
Epoch 99/100
 - 7s - loss: 64.4012
Epoch 100/100
 - 7s - loss: 63.9625
  

Насколько я понимаю: (Пожалуйста, поправьте меня, если я ошибаюсь)

Here my model accuracy is 63.9625 (просматривая последнюю эпоху 100). Кроме того, это нестабильно, поскольку существует разрыв между эпохой 99 и эпохой 100.

Вот мои вопросы:

  1. Как эпоха и размер пакета, определенные выше, связаны с повышением точности модели? Как его приращение и уменьшение влияют на точность модели?

  2. Является ли моя вышеуказанная эпоха, партия, n_input правильной для модели?

  3. Как я могу повысить точность своей модели? Достаточно ли указанного размера набора данных для этой модели?

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

Ответ №1:

Наличие очень большого размера эпохи не обязательно улучшит вашу точность. Размеры эпох могут повысить точность до определенного предела, после которого вы начнете перестраивать свою модель. Наличие очень низкого значения также приведет к недостаточной подгонке. Посмотрите это. Итак, глядя на огромную разницу между эпохой 99 и эпохой 100, вы уже можете сказать, что вы переоснащаете модель. Как правило, когда вы замечаете, что точность перестает увеличиваться, это идеальное количество эпох, которое у вас должно быть, обычно от 1 до 10. 100 уже кажется слишком большим.

Размер пакета не влияет на вашу точность. Это просто используется для управления скоростью или производительностью в зависимости от объема памяти в вашем графическом процессоре. Если у вас огромная память, у вас может быть огромный размер пакета, поэтому обучение будет проходить быстрее.

Что вы можете сделать, чтобы повысить точность: 1. Увеличьте свой набор данных для обучения. 2. Попробуйте вместо этого использовать сверточные сети. Узнайте больше о сверточных сетях на этом канале YouTube или, в двух словах, CNN поможет вам определить, на какие функции следует обратить внимание при обучении вашей модели. 3. Попробуйте другие алгоритмы.

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

1. Спасибо за ваше быстрое предложение. Не могли бы вы рассказать мне, как измерить точность модели. Что epoch loss представляет? Это точность модели?

2. Да. Потеря эпохи — это также показатель для измерения вашей точности. Есть две метрики: потеря или точность. Итак, в этом случае вы используете потери. Чтобы использовать точность, вы можете добавить параметр metric в свою модель. В этом случае вы не указали, поэтому по умолчанию используется значение loss. Используйте это: model.compile(loss='mse', optimizer='adam', metrics=['acc']) смотрите Эту документацию

3. В этом контексте: точность выражается в процентах или должна умножаться на 100, пример: эпоха 1/60 1806/1806- 20 с 11 мс / шаг — потеря: 73.4501 — acc: 0.1521

4. Вышеуказанная точность: 15% или 0,15%?

5. Это 15%. Вы должны умножить на 100.

Ответ №2:

Не существует четко определенной формулы для размера пакета. Обычно больший размер пакета выполняется быстрее, но может снизить точность. Вам придется поиграть с числом.

Однако один компонент, касающийся эпох, который вам не хватает, — это проверка. Нормально иметь набор данных проверки и наблюдать, повышается или понижается эта точность по этому набору данных. Если точность по этому набору данных повышается, вы можете умножить скорость обучения на 0,8. Смотрите эту ссылку: https://machinelearningmastery.com/difference-test-validation-datasets /

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

1. Вы не упомянули, как увидеть точность модели? В приведенном выше, что epoch loss представляет?