Repository navigation
Replies: 11 comments
|
1. 答案:置为 0(失活);放大;不再生效2. 答案:C
3. 答案:batch;通道;通道;BatchNorm4. 答案:A55.a缺失代码:model.eval() 在训练时调用了 model.train(),这会将 BatchNorm 和 Dropout 设置为训练模式: Dropout 会随机丢弃部分神经元。 修改方法:在验证前调用 model.eval() 5.b在没有 model.eval() 的情况下,模型依然处于 train() 模式,Dropout 在验证阶段依然处于开启状态。
5.c在没有 model.eval() 的情况下,BatchNorm (BN) 在验证阶段依然使用当前验证 batch 的均值和方差进行归一化,而不是使用训练阶段积累的全局统计量(running_mean 和 running_var)。
5.d验证结束后,应该调用 model.train(),将模型重新切换回训练模式。 虽然在你提供的代码中,下一个 epoch 循环开始时的第一行就是 model.train(),能碰巧恢复状态。但在良好的编程习惯中,或者在更复杂的代码结构中(比如验证后还要做某些训练阶段的操作),显式地在验证代码块结束后恢复模型状态是非常必要的,防止状态泄露。 标准验证代码块结构应该是: model.eval() # 切换到验证模式
with torch.no_grad():
# 验证逻辑...
model.train() # 验证结束,显式恢复训练模式 |
|
id:漫游地球,答案:
3.batch;通道;通道;BatchNorm。
a. 缺少 b. 如果没有切换到评估模式,Dropout 在验证时仍会随机屏蔽部分激活,因此预测结果会有随机性,验证精度也容易波动。 c. BatchNorm 会继续按照当前验证 batch 计算均值和方差,并更新 running mean 和 running variance,这不仅会使验证指标不准确,还会让验证数据影响模型中保存的统计信息。 d. 验证结束后应调用 |
a. |
|
1:置为0 2:C 3: 4:A 5: b—— c—— d—— |
(a) 缺失的是 model.eval()。它应该加在验证循环开始之前。 (b) 同一个样本的预测结果会出现不同;大量特征被随机丢弃,验证精度会受到影响。 (c) BatchNorm 会因为验证 batch 异常,连锁统计量的噪声很大,导致验证输出随 batch 波动、指标不稳定。 (d) 应该做的:再次调用 model.train() 把模块切换回训练模式,再进入下一个 epoch。 |
|
这是来自QQ邮箱的假期自动回复邮件。你好,我最近正在休假中,无法亲自回复你的邮件。我将在假期结束后,尽快给你回复。
|
|
1.丢弃 放大 不再生效 从来没觉得profiling快乐队 落灯花 |
a. model.eval() |
|
1.设为0; 放大; 不再生效 |
|
1.置为 0;放大;不再生效 |
Uh oh!
There was an error while loading. Please reload this page.
请完成 ch6.9-exercises 部分。
All reactions