深度学习——丢弃法

丢弃法

一个好的模型需要对输入的数据的扰动鲁棒

        使用有噪音的数据等价于Tikhonov正则(正则化防止过拟合

        丢弃法:在层之间加入噪音。

无偏差的加入噪音

假设x是一层到下一层的输入的话
对x加入噪音得到x ′ ,希望:E[x']=x。(虽然加入了噪音,不要改变期望结果)丢弃法对每个元素进行扰动[

一部分概率变成0,一部分数据变大(其中p∈(0,1))

使用丢弃法

通常将丢弃法作用在隐藏层的输出上,如图,使用丢弃法,部分h(h2、h5)变成0

推理中的丢弃法

正则项在训练中使用:影响模型参数的更新(只会对权重有影响)

推理过程中h=dropout(h),保证确定性的输出

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((60000, 28, 28, 1)).astype('float32') / 255
x_test = x_test.reshape((10000, 28, 28, 1)).astype('float32') / 255
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)

# 构建模型(使用卷积层和全连接层构建神经网络,并在全连接层之后添加了丢弃层)
model = keras.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dropout(0.5),  # 应用丢弃法,丢弃50%的神经元
    layers.Dense(10, activation='softmax')
])

# 编译模型(使用Adam优化器和交叉熵损失函数进行编译,并进行模型训练
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=64, validation_data=(x_test, y_test))

# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f'Test accuracy: {test_acc}')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值