Dropout 训练、测试

我们假设模型在训练时以p概率丢弃神经元,则训练、测试时的情况如下所述。

神经元的输入:x
神经元的输出:p*0 + (1-p)*x=(1-p)x 因为模型以概率p丢弃神经元,以概率1-p保留神经元,所以其总体输出为p0 + (1-p)*x=(1-p)*x。可以看出(1-p)*x相比于神经元输入x变小了,所以此时有两种处理方式:
1).训练期间对所有输出均除以(1-p),使其输出的期望仍为x。因为测试的时候所有的神经元均激活,假设测试时神经元的输入为x,则输出也为x。
2).训练期间除随机丢弃神经元,不做其他操作,则总体输出为(1-p)*x。因为测试的时候所有的神经元均激活,假设测试时神经元的输入为x,则此时神经元输出为x,明显大于(1-p)*x,且分布也变化了。为了让测试阶段抵消这种差异,对测试的输出要乘以(1-p),这样测试输出结果也为(1-p)*x,大小、分布与训练阶段统一了。

这是我理解的dropout训练、测试阶段的使用缩放系数的情况,理解有误的话请评论指正,感谢!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 TensorFlow 进行模型训练时,为了防止过拟合,通常会在网络中添加一些正则化层,如 Dropout 层。Dropout 层可以帮助模型在训练过程中随机地将一些神经元的输出置为零,从而强制让模型去适应数据中的噪声,从而达到防止过拟合的效果。 测试集上使用 Dropout 的方式与训练集上使用 Dropout 的方式略有不同。在测试集上,我们需要保留所有的神经元,而不是随机地将一些神经元的输出置为零。这是因为我们在测试集上的目的是评估模型在真实数据上的表现,而不是让模型去适应噪声。 因此,在测试集上使用 Dropout 的方式是,在模型的 Dropout 层中设置 `training=False`。这样,在测试集上,所有的神经元都会参与计算,而不会被随机地置为零。以下是一个示例代码: ``` import tensorflow as tf # 构建模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(10) ]) # 训练模型 model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) model.fit(train_dataset, epochs=10) # 在测试集上评估模型 model.evaluate(test_dataset) # 在测试集上使用 Dropout model.layers[1].training = False model.evaluate(test_dataset) ``` 在上面的代码中,我们首先构建了一个包含 Dropout 层的模型,并使用训练数据对其进行了训练。然后,在测试集上评估模型的表现。最后,我们将 Dropout 层的 `training` 参数设置为 False,并在测试集上再次评估模型的表现。这样就可以使用 Dropout 层在测试集上对模型进行正则化了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值