Шаг 138.
Глубокое обучение на Python. Основы машинного обучения. Улучшение качества обучения модели. Настройка основных параметров градиентного спуска

    На этом шаге мы рассмотрим, как можно повлиять на процесс обучения.

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

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

    Давайте рассмотрим конкретный пример: обучим модель MNIST из 26 шага с чрезмерно большой скоростью обучения, равной 1.


Пример 5.7. Обучение модели MNIST с чрезмерно большой скоростью обучения
from tensorflow.keras.datasets import mnist
from tensorflow import keras
from tensorflow.keras import layers

(train_images, train_labels), _ = mnist.load_data()
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype("float32") / 255

model = keras.Sequential([
    layers.Dense(512, activation="relu"),
    layers.Dense(10, activation="softmax")
])

model.compile(optimizer=keras.optimizers.RMSprop(1.),
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])

model.fit(train_images, train_labels,
          epochs=10,
          batch_size=128,
          validation_split=0.2)

    Модель быстро достигает точности обучения на проверочных данных в диапазоне 30-40%, но не может превзойти этот уровень. Попробуем уменьшить скорость обучения до более разумного значения 1e-2.


Пример 5.8. Та же модель с меньшей скоростью
from tensorflow.keras.datasets import mnist
from tensorflow import keras
from tensorflow.keras import layers

(train_images, train_labels), _ = mnist.load_data()
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype("float32") / 255

model = keras.Sequential([
    layers.Dense(512, activation="relu"),
    layers.Dense(10, activation="softmax")
])

model.compile(optimizer=keras.optimizers.RMSprop(1e-2),
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])

model.fit(train_images, train_labels,
          epochs=10,
          batch_size=128,
          validation_split=0.2)

    Теперь обучение сдвинулось с мертвой точки. Если вы оказались в подобной ситуации, попробуйте:

    В конце концов вы найдете конфигурацию, с которой начнется обучение.

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




Предыдущий шаг Содержание Следующий шаг