Dropout — это техника регуляризации, используемая в нейронных сетях для предотвращения переобучения. Она заключается в случайном "отключении" (или обнулении) определенного процента нейронов во время обучения, что помогает модели обобщать данные и не подстраиваться под шум или специфические особенности обучающего набора данных.
На каждом шаге обучения случайным образом выбирается подмножество нейронов, которые будут отключены. Отключенные нейроны не участвуют в прямом и обратном проходе на текущем этапе. Этот процесс повторяется на каждом этапе обучения, причем каждое отключение производится независимо.
На этапе предсказания (тестирования) dropout не применяется. Для компенсации эффекта, вызванного отключением нейронов на этапе обучения, все веса сети масштабируются в соответствии с вероятностью dropout
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
# Загрузка данных
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape((X_train.shape[0], 28 * 28)).astype('float32') / 255
X_test = X_test.reshape((X_test.shape[0], 28 * 28)).astype('float32') / 255
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
# Создание модели
model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(28 * 28,)))
model.add(Dropout(0.5)) # Dropout с вероятностью 0.5
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
# Компиляция модели
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Обучение модели
model.fit(X_train, y_train, epochs=20, batch_size=128, validation_data=(X_test, y_test))
# Оценка модели
score = model.evaluate(X_test, y_test)
print(f'Точность на тестовых данных: {score[1] * 100:.2f}%')
Dropout помогает нейронной сети не запоминать обучающие данные, а обучаться выявлять общие закономерности.
Отключение случайных нейронов заставляет остальные нейроны адаптироваться и работать независимо, что улучшает устойчивость модели.
Dropout повышает способность модели хорошо работать на новых, невидимых данных.
Ставь 👍 и забирай 📚 Базу знаний