PyTorch使用技巧1:F.dropout加self.training、F.log_softmax

博客主要介绍了Pytorch相关内容。一是self.training,涉及dropout方法在训练和验证/测试时的使用情况,以及Module的training属性、F.dropout和nn.Dropout的操作实现,还有training属性受train()和eval()方法影响的机制;二是F.log_softmax,介绍了其作用和函数语言格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

1、self.training

dropout方法是将输入Tensor的元素按伯努利分布随机置0,具体原理此处不赘,以后待补。总之就是训练的时候要用dropout,验证/测试的时候要关dropout。

以下介绍Module的training属性,F(torch.nn.functional).dropout 和 nn(torch.nn).Dropout 中相应操作的实现方式,以及Module的training属性受train()和eval()方法影响而改变的机制。

方法来自论文:https://www.jmlr.org/papers/volume15/srivastava14a/srivastava14a.pdf

参考:https://blog.youkuaiyun.com/PolarisRisingWar/article/details/117754981

2、F.log_softmax

F.softmax作用:
按照行或者列来做归一化的
F.softmax函数语言格式:

# 0是对列做归一化,1是对行做归一化

F.softmax作用:按照行或者列来做归一化的
F.softmax函数语言格式:

# 0是对列做归一化,1是对行做归一化


F.softmax(x,dim=1) 或者 F.softmax(x,dim=0)

F.log_softmax作用:

在softmax的结果上再做多一次log运算

F.log_softmax函数语言格式:

F.log_softmax(x,dim=1) 或者 F.log_softmax(x,dim=0)

原文链接:https://blog.youkuaiyun.com/m0_51004308/article/details/118001835
参考:https://blog.youkuaiyun.com/m0_51004308/article/details/118001835

# 环境需求:pip install torch torch_geometric import torch import torch.nn.functional as F from torch_geometric.data import Data, Dataset from torch_geometric.nn import GCNConv from torch_geometric.loader import DataLoader # 1. 定义GNN模型 class FaultDetector(torch.nn.Module): def __init__(self, num_features, hidden_dim): super().__init__() self.conv1 = GCNConv(num_features, hidden_dim) self.conv2 = GCNConv(hidden_dim, 2) # 二分类输出 def forward(self, data): x, edge_index = data.x, data.edge_index x = self.conv1(x, edge_index) x = F.relu(x) x = F.dropout(x, training=self.training) x = self.conv2(x, edge_index) return F.log_softmax(x, dim=1) # 2. 生成模拟数据(实际使用时需替换为真实数据) def generate_sample(): # 节点特征(假设每个节点有5个传感器特征) x = torch.randn(10, 5) # 10个节点,每个节点5个特征 # 边连接(随机生成示例拓扑) edge_index = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8, 9]], dtype=torch.long) # 标签(随机生成示例标签,0表示正常,1表示故障) y = torch.tensor([0, 1, 0, 1, 0, 0, 1, 0, 1, 0], dtype=torch.long) return Data(x=x, edge_index=edge_index, y=y) # 3. 训练参数设置 device = torch.device('cpu') model = FaultDetector(num_features=5, hidden_dim=16).to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # 4. 训练循环 def train(): model.train() data = generate_sample().to(device) for epoch in range(100): optimizer.zero_grad() out = model(data) loss = F.nll_loss(out, data.y) loss.backward() optimizer.step() if epoch % 10 == 0: pred = out.argmax(dim=1) correct = (pred == data.y).sum().item() acc = correct / data.y.size(0) print(f'Epoch {epoch:3d} | Loss: {loss:.4f} | Acc: {acc:.2f}') # 5. 执行训练 if __name__ == "__main__": train()显示这段代码的运行结果
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源代码杀手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值