神经网络基础-神经网络补充概念-36-dropout正则化

概念

Dropout 是一种常用的正则化技术,用于减少深度神经网络中的过拟合问题。它在训练过程中随机地将一部分神经元的输出置为零,从而强制模型在训练过程中学习多个独立的子模型,从而减少神经元之间的依赖关系,提高模型的泛化能力。

原理

随机失活:在每个训练批次中,Dropout 随机地选择一些神经元,并将其输出设置为零。这意味着这些神经元在此次训练中不会被激活,也不会参与前向传播和反向传播。

训练阶段和预测阶段:在训练阶段,通过将部分神经元失活,Dropout 有助于防止神经元的过度依赖,从而减少过拟合。在预测阶段,Dropout 通常会关闭,因为此时需要使用整个网络来进行推理。

集成效应:由于 Dropout 训练了多个子模型,可以将它们合并起来形成一个集成模型,从而提高模型的性能和稳定性。

代码实现

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# 加载数据
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 28 * 28).astype('float32') / 255.0
x_test = x_test.reshape(-1, 28 * 28).astype('float32') / 255.0
y_train = keras.utils.to_categorical(y_train, num_classes=10)
y_test = keras.utils.to_categorical(y_test, num_classes=10)

# 构建带 Dropout 正则化的神经网络模型
model = keras.Sequential([
    layers.Input(shape=(784,)),  # 输入层
    layers.Dense(128, activation='relu'),  # 隐藏层
    layers.Dropout(0.5),  # Dropout 层,随机失活率为 0.5
    layers.Dense(10, activation='softmax')  # 输出层
])

# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, batch_size=64, epochs=10, validation_split=0.1)

# 评估模型
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print("Test Loss:", test_loss)
print("Test Accuracy:", test_accuracy)

你可能感兴趣的:(神经网络,神经网络补充,神经网络,人工智能,深度学习)