第二届世界科学智能大赛地球科学赛道:AI极端降水预报
远歌已逝 2024-08-24 12:01:02 阅读 86
第一天:
根据文档的教程报名比赛并登录了Notebook,在第一次的时候,直接可以顺利的根据指引提交压缩包,得到了0.0011分。
之后,根据网上搜索到的信息,我发现代码中的重点是模型的构建和训练,在尝试修改的时候,添加了一层卷积层,不过也是报错很久,在不断的在网上寻找解决办法之后,终于能够拿到压缩包了,然后提交后结果显示失败了,经过又是一系列的修改,虽然结果不是失败了,但却是0分 。
<code> import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self, num_in_ch, num_out_ch):
super(Model, self).__init__()
self.conv1 = nn.Conv2d(num_in_ch, num_out_ch, kernel_size=3, stride=1, padding=1)
self.relu1 = nn.ReLU()
self.conv2 = nn.Conv2d(num_out_ch, num_out_ch, kernel_size=3, stride=1, padding=1)
self.relu2 = nn.ReLU()
# 新增的卷积层
def forward(self, x):
B, S, C, W, H = tuple(x.shape)
x = x.reshape(B, -1, W, H)
out = self.conv1(x)
out = self.relu1(out)
out = self.conv2(out)
out = self.relu2(out)
out = out.reshape(B, S, W, H)
return out
# 假设输入和输出的变量数和时间步长
in_variables = 24
out_variables = 1
in_times = len(fcst_steps)
out_times = len(fcst_steps)
input_size = in_times * in_variables
output_size = out_times * out_variables
挺受打击 。不过我发现这个压缩包大小也就600多KB,而第一次的压缩包是800多MB,我分别点击进入压缩包,发现它们都是由很多的1.3MB的pt文件组成,但是压缩后的大小去差这么多,可能是由于后边的方法中训练出的结果0(或 1)很多的缘故。
最后我根据网上的信息,想着去调一下超参数,比如调整了num_epochs参数为4次,压缩包大小和第一次差不多,信心满满提交了,结果0.0005分
这真的不好搞啊,没有基础,从头学习真的挺不容易。。。
学习部分
由于我有了机器学习的基础,对这部分知识了解还有一点,所以直接根据这次机会学习深度学习的部分知识。
回想起在机器学习中学到的一个神经网络算法,当时老师还提到了一些梯度下降的知识,经过学习,我现在大致清楚深度学习最基础的神经网络的一点知识。以我个人理解,这属于是根据输入的数据,通过大量的算力去计算其中的可能规律,这个理解其实是来自于机器学习课程 学习中的感受。因为数据、事物的客观规律,比如说在目标检查中的识别某种动物,这是由于它们这一类事物都有同样的地方,就是说有区别他们的规律。而神经网络就是通过大量的事物的数据的训练,最终找到一种模型来区别它们。
神经网络部分学的知识
神经元的概念:
如下图所示,神经元的结构一般是有
输入:神经元接收来自其他神经元或外部环境的输入信号。这些输入信号通过连接到神经元的树突传递给神经元的细胞体。细胞体:也称为神经元的核心或轴突起源区,细胞体汇总所有传入的信号,决定神经元是否激活并产生输出。权重:每个输入信号都与一个权重相关联,表示该信号对神经元的影响程度。权重确定了信号在神经元内部处理过程中的重要性。激活函数:细胞体在接收到足够的输入信号后,会根据激活函数的特定规则来决定是否激活。常见的激活函数包括sigmoid、ReLU、tanh等,它们引入非线性特性,允许神经网络学习和处理复杂的数据模式。输出:激活函数的输出值表示神经元是否被激活,并将这个信息传递给与其连接的其他神经元或神经网络的下一层。轴突:一旦神经元被激活,输出信号将通过轴突传播到连接的下一个神经元或目标细胞。轴突末端可以分支成多个突触,用于与其他神经元建立连接并传递信号。
在下图中,有三个输入a1、a2、a3,它们分别通过三个权重w1、w2、w3进行运算传递到胞体,胞体首先通过sum求和,之后用sgn函数对数据进行进一步的处理。最后输出最后的结果。
之后,多个神经元通过一些方式(全连接等)形成许多层,最后连接到输出层,形成神经网络。现在学习的很浅,大概是这样吧。
在神经网络中,经常见到的有输入层、隐藏层、池化层、输出层,中间还有一些非线性的激活函数。
输入层一般是数据组成的矩阵。而原始数据可能是各种各样的,比如图像,文本,等等。通过一些隐层,模型可以把这些输入的显示特征转化为一些我们不理解的数据。在这方面我认为可能有支持向量机升维的意思在里边。毕竟都是重构了数据,而且数据的特征明显变多了。池化层通过减少特征映射的空间维度,有助于提取最显著的特征并减少计算量。输出层则产生最终的预测或分类结果,通常采用适当的激活函数(如relu函数sigmoid函数)来输出概率分布或决策。激活函数是神经网络中的非线性操作,有助于引入非线性特征并增加模型的表达能力。常见的激活函数包括sigmoid、ReLU和tanh函数,它们在不同情况下表现出不同的优势和劣势。
pytorch部分学习
这几天首先是在自己电脑上配置了pytorch的GPU版本,相对来说这个挺不好搞的,坑很多。
第一部分,模型评价的方法
这部分之前在机器学习的学习中对准确率、精确率、混淆矩阵、F1分数、AUC之类的有些了解了。
最新了解到的指标有:
Kappa系数衡量了实际观测值与预期随机一致性之间的偏离程度。它通过比较观察到的分类协议与预期的随机协议来度量评估者之间的一致性或分类器的性能。置信度(confidence level)是指对一个参数或者统计推断的信心程度,通常用于描述一个置信区间的精度或者一个假设检验的可靠性。置信区间:当我们从样本数据中得出一个估计值时,置信度描述了我们对这个估计值的信心程度。例如,我们可以说“我们对平均身高的估计值为165厘米,置信度为95%”,这意味着我们有95%的信心相信真实的平均身高落在估计的置信区间内。IOU衡量了两个区域的交集与并集之间的比例,用于评估预测的区域(如边界框或分割掩模)与真实标签之间的重叠度。Average Precision(平均精度)是在目标检测任务中常用的一个指标,它反映了模型在不同类别上预测的准确性和完整性。AP的计算通常结合了精确率-召回率曲线(Precision-Recall Curve,PR Curve)的信息。AP(Average Precision)是一种用于评估目标检测或物体识别任务中模型性能的重要指标之一。它通常结合了不同类别的精度和召回率,以综合评估模型在各个类别上的表现。mAP(mean Average Precision)是指平均精度的平均值,通常用于评估物体检测或图像检索系统中的性能。它是AP(Average Precision)在多类别或多个查询上的平均值,是一种综合评估模型在整体任务中表现的指标。
pytorch的其他知识的学习
目前学习到主要组成模块,前必的知识有了一定程度上的了解,环境已经配置好了,等有时间了可以看看配套的代码,实际跑一下 。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。