Случайность модели LSTM

У меня одна модель LSTM, как показано ниже:

model = Sequential()
model.add(Conv1D(3, 32, input_shape=(60, 12)))
model.add(LSTM(units=256, return_sequences=False, dropout=0.25))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
model.summary() 

Каждый раз, когда я использую один и тот же набор данных для его обучения, я получаю другую модель. В большинстве случаев производительность обученной модели приемлема, но иногда бывает очень плохо. Я думаю, что во время обучения или инициализации есть некоторая случайность. Итак, как я могу все исправить, чтобы получить одну и ту же модель для каждой тренировки?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
434
3

Ответы 3

Вы можете сохранить это

from keras.models import load_model
model.save("lstm_model.h5")

И загрузите позже

model = model.load("lstm_model.h5")

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

NormanZhu 08.10.2018 07:13

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

import numpy as np
np.random.seed(1000)

import os
import random

os.environ['PYTHONHASHSEED'] = '0'
random.seed(12345)

# Also set the tf randomness to some fixed values like this if you need:
tf.set_random_seed(1234)

Это сработало для меня.

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

Многие сложные модели, особенно LSTM, нестабильны. Вы можете посмотреть на сверточные подходы. Я заметил, что они работают почти одинаково и намного стабильнее. https://arxiv.org/pdf/1803.01271.pdf

Другие вопросы по теме