Сверточные нейросети. Джейд Картер

Читать онлайн.
Название Сверточные нейросети
Автор произведения Джейд Картер
Жанр
Серия
Издательство
Год выпуска 2024
isbn



Скачать книгу

градиенты и, следовательно, способствует более быстрой сходимости модели.

      Однако у ReLU есть и недостатки. Один из основных – это проблема "умирающих ReLU". Эта проблема возникает, когда большое количество нейронов в сети перестает реагировать на изменения входных данных. Это происходит потому, что для отрицательных входных значений ReLU возвращает ноль, и если нейрон часто получает отрицательные значения, он может навсегда перестать обновлять свои веса, фактически "умирая". В результате сеть может терять значительное количество нейронов, что снижает её способность к обучению и обобщению.

      Несмотря на этот недостаток, ReLU остается популярным выбором благодаря своим преимуществам и простоте. Для решения проблемы "умирающих ReLU" были разработаны модификации, такие как Leaky ReLU и ELU, которые сохраняют преимущества ReLU, добавляя при этом возможность обработки отрицательных значений.

      Пример использования ReLU

      Рассмотрим пример использования функции активации ReLU в нейронной сети, реализованной с помощью библиотеки Keras на Python. В этом примере мы создадим простую полносвязную нейронную сеть для классификации рукописных цифр из набора данных MNIST.

      ```python

      import keras

      from keras.models import Sequential

      from keras.layers import Dense, Flatten

      from keras.datasets import mnist

      from keras.utils import np_utils

      # Загрузка данных MNIST

      (X_train, y_train), (X_test, y_test) = mnist.load_data()

      # Нормализация входных данных

      X_train = X_train.astype('float32') / 255

      X_test = X_test.astype('float32') / 255

      # Преобразование меток в one-hot encoding

      y_train = np_utils.to_categorical(y_train, 10)

      y_test = np_utils.to_categorical(y_test, 10)

      # Создание модели

      model = Sequential()

      # Добавление слоев с функцией активации ReLU

      model.add(Flatten(input_shape=(28, 28))) # Преобразование входных данных в вектор

      model.add(Dense(512, activation='relu')) # Первый полносвязный слой с ReLU

      model.add(Dense(512, activation='relu')) # Второй полносвязный слой с ReLU

      model.add(Dense(10, activation='softmax')) # Выходной слой с softmax для многоклассовой классификации

      # Компиляция модели

      model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

      # Обучение модели

      model.fit(X_train, y_train, batch_size=128, epochs=10, validation_split=0.2)

      # Оценка модели на тестовых данных

      score = model.evaluate(X_test, y_test)

      print(f'Test loss: {score[0]}')

      print(f'Test accuracy: {score[1]}')

      ```

      Пояснение

      1. Загрузка данных MNIST:

      Мы загружаем набор данных MNIST, который состоит из изображений рукописных цифр (28x28 пикселей).

      2. Нормализация входных данных:

      Мы нормализуем значения пикселей, деля их на 255, чтобы привести их в диапазон от 0 до 1.

      3. Преобразование меток в one-hot encoding:

      Мы преобразуем метки классов в формат one-hot encoding, что необходимо для обучения модели в задачах многоклассовой классификации.

      4. Создание модели:

      Мы создаем последовательную модель (Sequential) и добавляем слои:

      – Первый слой преобразует входные изображения в одномерный вектор.

      – Два полносвязных слоя с 512 нейронами каждый и функцией активации ReLU.

      – Выходной слой с 10 нейронами и функцией активации softmax для предсказания вероятностей классов.

      5. Компиляция модели: Мы компилируем модель, используя функцию потерь