TGViewer
Data Science | Вопросы собесов Data Science | Вопросы собесов @easy_ds · 4.89K subscribers
Post #2604 373
🤔 Как работает 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 повышает способность модели хорошо работать на новых, невидимых данных.

Ставь 👍 и забирай 📚 Базу знаний
More from @easy_ds
  1. Oct 12, 2026🤔 Как решить задачу, где присутствует одновременно два target – один categorical, другой…
  2. Oct 12, 2026🤔 Как происходит детекция без anchor box-ов? Обнаружение объектов без использования ancho…
  3. Oct 12, 2026Post #2701
  4. Oct 11, 2026🤔 Что такое декоратор? Это функция, модифицирующая или расширяющая поведение другой функц…
  5. Oct 11, 2026Post #2699
  6. Oct 11, 2026🤔 Как валидировать временные ряды ? Валидация временных рядов требует специальных подходо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →