Сверточные нейросети. Джейд Картер. Читать онлайн. Newlib. NEWLIB.NET

Автор: Джейд Картер
Издательство: Автор
Серия:
Жанр произведения:
Год издания: 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. Компиляция модели: Мы компилируем модель, используя функцию потерь