一、影响验证值与测试值的因素可能有
1、学习率 lr(用于控制模型参数更新的步长或变化速度)
学习率过大:可能导致损失函数直接越过全局最优点,容易发生梯度爆炸,loss振动幅度较大,模型难以收敛。
学习率过小:虽然可以避免模型发散,但会导致参数更新的步长过小,模型收敛速度非常慢,甚至可能陷入局部最优解而无法找到全局最优解。
固定学习率:在整个训练过程中保持不变的学习率。这种方法简单但可能不是最优的,因为模型在训练的不同阶段可能需要不同的学习率。
衰减学习率:随着训练的进行,逐渐降低学习率。这种方法有助于在训练初期快速收敛,同时在训练后期避免模型发散。衰减学习率的具体策略包括轮数衰减、指数衰减、分数衰减等。
自适应学习率:根据训练过程中的模型表现来动态调整学习率。例如,使用验证集上的损失值等指标来判断模型性能,并据此调整学习率大小。常见的自适应学习率优化算法包括AdaGrad、RMSprop、Adam等。
2、batch_size (是机器学习和深度学习中一个非常关键的概念,特别是在训练神经网络时。它指的是在更新模型参数之前,用于计算梯度并更新网络权重的样本数量。简单来说,就是一次迭代(iteration)中使用的样本数量。)
3、epoch(“epoch”一词常用于描述训练神经网络或其他机器学习模型时的一个完整的数据集通过模型的次数。简单来说,一个epoch指的是在整个训练集中,所有的样本都被前向传播和反向传播(即更新模型权重)了一次。)
在深度学习中,由于数据集通常很大,无法一次性全部加载到内存中,因此我们会采用小批量(mini-batch)的方式进行处理。这意味着数据集被分成多个较小的批次,每个批次包含一定数量的样本。在训练过程中,模型会依次处理这些批次,直到所有的批次都被处理过,这时我们就说完成了一个epoch。
num_epochs = 10 # 假设我们想要训练10个epoch
for epoch in range(num_epochs):
# 在这里,你可能会有一个内部循环来遍历数据集的每个批次
# 假设loader是一个DataLoader对象,它提供了批次迭代
for batch_idx, (data, target) in enumerate(loader):
# 前向传播
output = model(data)
loss = criterion(output, target)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 在每个epoch结束时,可以打印一些信息,如损失值
print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
二、
True Positive (TP)======预测值与真实值的交集
False Positive (FP)=====预测值有,真实值没有
False Negative (FN)=====真实值有,预测值没有
True Negative TN========真实值与预测值都没有
1、做目标识别时,例如猫狗识别,可以直接使用以上的指标,因为猫狗识别的结果只有两类(是或者不是)
2、做语义分割时,例如识别一张图片上的天空、房子、草地,花朵等,一朵花的图形中有多少像素,评价分类精度时产生的background与预测值之间可以使用以上的指标
3、做屋顶提取或者是线特征提取时,需要提取房子的形状(一个多边形)时,如果继续使用以上的指标可能需要对像素进行离散化处理,或者使用对象层次的几何精度评价的方法