🤔 Как работает dropout?



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 повышает способность модели хорошо работать на новых, невидимых данных.



Ставь 👍 и забирай 📚 Базу знаний