6.6.2 模型训练
f isinstance(net, nn.Module):
net.eval() # 设置为评估模式
if not device:
device = next(iter(net.parameters())).device
对于这段代码,作用如下
-
net.eval()
设置为评估模式之后,某些层(如 Dropout 和 BatchNorm)的行为会与训练模式不同。例如:- Dropout 层在评估模式下不会随机丢弃神经元。
- BatchNorm 层在评估模式下会使用训练时计算的均值和方差,而不是当前批次的统计量。
net.train()
的行为就完全与上面的相反 -
device = next(iter(net.parameters())).device
是在获取当前网络所在的设备(CPU或者GPU)。从后面的代码来看,我们最开始是在GPU上面建立的网络,所以这里device
会是GPU。注意,net.parameters()
返回的是一个容器(不是一个列表,所以net.parameters()[0]
是错误的),iter(net.parameters())
是将这个容器转变为可迭代对象,next(iter(net.parameters()))
是在获取第一个参数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2024-02-20 Blocking Elements
2024-02-20 XOR-distance
2024-02-20 Minimize Inversions
2024-02-20 Lonely Mountain Dungeons
2024-02-20 Modular Sequence
2024-02-20 Equalize
2024-02-20 世界树