Результат меняется каждый раз, когда я запускаю код нейронной сети - PullRequest
1 голос
/ 04 октября 2019

Я получил результаты, запустив код, приведенный в этой ссылке Нейронная сеть - прогнозирование значений нескольких переменных . Мне удалось вычислить точность потерь и т. Д. Однако каждый раз, когда я запускаю этот код, я получаю новый результат. Можно ли получить такой же (последовательный) результат?

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Код полон random.randint() везде! Кроме того, веса в большинстве случаев устанавливаются случайным образом, а batch_size также оказывает влияние (хотя и незначительное) на результат.

  1. Y_train, X_test, X_train генерируются случайным образом
  2. Использование adam в качестве оптимизатора означает, что вы будете выполнять стохастический градиентный спуск. С случайной начальной точкой итераций для сходимости.
  3. batch_size = 8 означает, что вы будете запускать партии, состоящие из 8 случайно выбранных выборок.

Решение:

  1. Установите случайное начальное число в вашем коде, чтобы всегда иметь случайные значения, генерируемые с помощью np.random.seed()
  2. Не вызывает особых проблем, хотянезначительные отклонения
  3. То же, что и 2.

Если я найду способ использовать согласованные методы выборки для проблемы batch_size / epoch, я отредактирую свой ответ.

1 голос
/ 04 октября 2019

Там много случайных массивов. Используйте np.random.seed(), чтобы получать одинаковые каждый раз. Например:

np.random.seed(42)
for _ in range(3):    
    print(np.random.random(3))

Каждый раз, когда вы запустите этот код, вы получите тот же результат. На моей машине:

[0.37454012 0.95071431 0.73199394]
[0.59865848 0.15601864 0.15599452]
[0.05808361 0.86617615 0.60111501]

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

  • Разделение на наборы данных обучения, проверки и проверки с помощью train_test_split().
  • Установка начальных весов в нейронной сети.
  • Пути оптимизации.

Большинство функций ML позволяют вам передавать начальное число в качестве аргумента. Посмотрите в документации. В зависимости от того, что вы делаете, и от того, какие библиотеки вы используете, вы можете или не сможете сделать весь конвейер воспроизводимым.

Вам также может понравиться эта статья или этот о получении воспроизводимых результатов с Keras.

...