parameters - 深度学习的损失分析
问题描述
我是深度学习的新手,我已经建立了一个图卷积网络。我使用了 5 折交叉验证。在绘制了平均值之后train_loss (blue)
,validate_loss (orange)
我得到了这个孩子。
如您所见,从validate_loss的曲线趋势来看,我的网络似乎学到的东西很少。(我猜是数据?GCN 框架?学习率?)
你们能具体帮我找出错误吗?
我会很感激的!如果你不明白我的意思,请告诉我。
class Scorer(nn.Module):
"""
Three conv_layers and two fc_layers with Dropout
"""
def __init__(self):
super(Scorer, self).__init__()
self.conv_layer1 = GraphConvNet(5, 64)
self.conv_layer2 = GraphConvNet(64, 128)
self.conv_layer3 = GraphConvNet(128, 256) # (I have tried delete conv_layer3)
self.fc_layer1 = nn.Linear(256, 128)
self.drop_layer1 = nn.Dropout(0.5)
self.fc_layer2 = nn.Linear(128, 64)
self.drop_layer2 = nn.Dropout(0.5)
self.out_layer = nn.Linear(64, 1)
def forward(self, NormLap, feat):
h = self.conv_layer1(NormLap, feat)
h = F.leaky_relu(h)
h = self.conv_layer2(NormLap, h)
h = F.leaky_relu(h)
h = self.conv_layer3(NormLap, h)
h = F.leaky_relu(h)
h = self.fc_layer1(h)
h = self.drop_layer1(h)
h = F.leaky_relu(h)
h = self.fc_layer2(h)
h = self.drop_layer2(h)
h = F.leaky_relu(h)
h = self.out_layer(h)
h = F.leaky_relu(h)
以下是我的网络和参数:
# parameter setting
learning_rate = 0.001 # (I have tried 1e-1, 1e-2)
weight_decay = 1e-3 # (I have tried 1e-4)
epochs = 500
batch_size = 50 # (I have tried 30)
model = Scorer()
loss_func = nn.MSELoss()
optimizer = th.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=weight_decay)
解决方案
这几乎就是训练和验证损失应该做的事情。损失随着时间的推移而下降;这就是优化器正在尝试做的事情。在 valid_loss 趋于平稳或平稳后 train_loss 继续下降,表明模型在 epoch ~100 左右后开始过度拟合。MSE 0.3 对您的应用程序是好是坏完全取决于应用程序,但是是的,优化器优化得很好。
请查看此资源以了解如何解释损失曲线:https ://machinelearningmastery.com/learning-curves-for-diagnosing-machine-learning-model-performance/
“从 validate_loss 的曲线趋势来看,我的网络似乎学到的东西很少” - 如果您解释(非常详细:)您为什么这么认为,以获得更好的答案,这将有所帮助。除了你看到的,你还期待看到什么?我看着同一张图,在我看来,您的网络正在学习对数据进行建模并预测您要预测的任何内容。
推荐阅读
- twitter-bootstrap - 调整浏览器大小时,Bootstrap navbar-toggler-icon(3 栏堆栈)不显示
- powershell - 将结果从自定义 {0}`t{1}`t{2}`t{3}`t{4} 格式输出到 OGV?
- php - 尝试从发布请求访问请求属性以登录数据库 PHP Slim 3
- javascript - 检测反应页面变化的最佳方法
- spring-boot - 如果处理失败,如何将 STOMP 消息重新传递给消费者?
- python - 迭代器相当于python中的切片?
- javascript - Mongoose 聚合:“组”阶段内的查询
- java - 我们可以从 AOP 中的方面实现类调用 rest 端点吗?我还需要在其他项目中使用这个 AOP lib 项目
- javascript - 如何将自定义标记添加到 Google 时间轴图表?
- javascript - 对数组进行排序,嵌套所有非唯一值