首页 > 其他分享 >李宏毅《机器学习》总结 - 2022 HW3(图像识别、CNN) Strong Baseline

李宏毅《机器学习》总结 - 2022 HW3(图像识别、CNN) Strong Baseline

时间:2024-01-31 19:44:48浏览次数:24  
标签:Baseline nn 李宏毅 ReLU 64 2022 128 512 out

调参调吐了。。最好做到了 private 0.82 / public 0.808
这题前前后后做了五天。。主要是后来 train 一次就得花很长很长时间,我的 kaggle 余额也用的差不多了。。
image

这个题目大概就是给你 11 种食物的图片,让你学习,并分类

CNN

处理图片就先转化成 \(128\times 128\) 个 pixel,然后做 CNN。pytorch 的卷积层长这样:

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)

前面两个可以理解成原来的图为 \(\mathit{in}\times N\times N\),卷积之后变成 \(\mathit{out}\times N\times N\)
kernel 就是 filter 的大小,stride 就是 filter 每次移动的步长,padding 就是移动出去之后填充的数字
做完卷积之后通常接一个batch normalization,防止 gradient exploding/vanishing
为了减少运算,一般再加一个池化层,设成 \(2\times 2\)

class Classifier(nn.Module):
   def __init__(self):
       super(Classifier, self).__init__()
       # torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
       # torch.nn.MaxPool2d(kernel_size, stride, padding)
       # input 維度 [3, 128, 128]
       self.cnn = nn.Sequential(
           nn.Conv2d(3, 64, 3, 1, 1),  # [64, 128, 128]
           nn.BatchNorm2d(64),
           nn.ReLU(),
           nn.MaxPool2d(2, 2, 0),      # [64, 64, 64] 
          

           nn.Conv2d(64, 128, 3, 1, 1), # [128, 64, 64]
           nn.BatchNorm2d(128),
           nn.ReLU(),
           nn.MaxPool2d(2, 2, 0),      # [128, 32, 32]
         
           nn.Conv2d(128, 256, 3, 1, 1), # [256, 32, 32]
           nn.BatchNorm2d(256),
           nn.ReLU(),
           nn.MaxPool2d(2, 2, 0),      # [256, 16, 16]

           nn.Conv2d(256, 512, 3, 1, 1), # [512, 16, 16]
           nn.BatchNorm2d(512),
           nn.ReLU(),
           nn.MaxPool2d(2, 2, 0),       # [512, 8, 8]
           
           nn.Conv2d(512, 512, 3, 1, 1), # [512, 8, 8]
           nn.BatchNorm2d(512),
           nn.ReLU(),  
           nn.MaxPool2d(2, 2, 0),       # [512, 4, 4]
       )
       self.fc = nn.Sequential(
           nn.Dropout(0.4),
           nn.Linear(512*4*4, 1024),
           nn.ReLU(),
           nn.Linear(1024, 512),
           nn.ReLU(),
           nn.Linear(512, 11)
       )

   def forward(self, x):
       out = self.cnn(x)
       out = out.view(out.size()[0], -1)
       return self.fc(out)

然后结合一下 ensemble,简单来说就是跑好几次这个模型,testing 预测的时候取 argmax,也叫做 k-fold,这里我让 \(k=4\)
还有就是 cross validation,由于是 4-fold,我每次重新划分训练集和验证集,具体的可以先把所有的训练资料存起来,然后每一轮训练的时候重新划分。
这样跑几轮,大概 2、3 个小时(当时我让 \(epoch=25\)),就跑出来 private 0.77 / public 0.79(所以后来四天我就让 public 提升了 0.02?
image

感觉到 strong baseline 就只需要把训练时间延长就行了,也试了不同的模型 & loss 函数,感觉差距也不是很大。单个模型延长到 \(epoch=100\),1-fold 跑出来就 0.78 了
image
又跑了将近 20 个小时,跑出来 4-fold 就是 private 0.82 了

标签:Baseline,nn,李宏毅,ReLU,64,2022,128,512,out
From: https://www.cnblogs.com/SkyRainWind/p/17999957

相关文章

  • P8353 [SDOI/SXOI2022] 无处存储
    存下每个点的父亲信息\(fa\)和点权\(w\)就已经用去近\(54\text{MiB}\)了,树剖似得彻彻底底。考虑树分块:随机选定\(\sqrtn\)个点作为关键点建虚树,这样每个点向上走到关键点的步数期望为\(\sqrtn\),然后每个关键点存原树上从它到它虚树上的父亲结点的信息。dfs似了,......
  • Windows server 2022 安全基线加固 安全加固 仅供参考
    WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp]"PortNumber"=dword:0000045a[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]"Dis......
  • [NOI2022] 移除石子
    [NOI2022]移除石子题目描述你正在玩一个名为“移除石子”的小游戏。有\(n\)堆石子排成一行,第\(i\)堆有\(a_i\)枚,你的任务是通过如下的操作将所有石子移除:操作一:选择一堆石子,将其中的至少\(2\)枚石子移除;操作二:选择一个连续的编号区间\([l,r]\)(\(1\lel\ler\l......
  • 李宏毅《机器学习》总结 - Transformer
    前言当时老师要求我做transformer和self-attention的ppt,结果当时在训练ACM没大有时间,就弄了个质量不高的,不出意外的被喷了。。。现在回头看看当时做的整体没有大问题,但是由于知识没有连贯起来导致有些地方没有提到,也没有形成一个比较完整的架构。Transformer能做的任务......
  • Visual Studio 2022 + Qt 中文乱码问题
    使用Qt编译中文标题出现乱码问题如下图首先打开文件属性->点击(C/C++)->点击(所有选项)->找到(附加选项)这一栏修改为(/UTF-8)注意大小写  然后在头文件中添加以下代码:1#if_MSC_VER>=16002#pragmaexecution_character_set("utf-8")3#endif即可解决问题......
  • P8352 [SDOI/SXOI2022] 小 N 的独立集
    还是先打暴力,枚举\(k^n\)种树的形态做树形DP,时间复杂度\(\mathcalO(nk^n)\),拿下\(n\le8\)和\(k=1\)的\(25\)分。虽然很简单,还是交代下吧:设\(f(u,0/1)\)表示以\(u\)为根的子树中是否选\(u\)的最大权独立集,\(f(u,0)\getsw_u+\sum\limits_{v\inson_u}......
  • (二)VS2022启动项目调试显示“正在加载......的符号”的解决方法
    之前重来没有遇到过的问题,自从安装了VS2022后,每次调试都会显示“正在加载......”的弹框,虽然对程序没有多大影响,但是这种体验非常不友好,于是找了许多方法,下面是亲测有效的方法:一、检查“工具”》“选项”》“调试”》“符号”是否去√。二、检查“工具”》“选项”》“调试”......
  • P8350 [SDOI/SXOI2022] 进制转换
    记\(len_x\)为\(x\)在\(a\)中出现的次数,显然有\(\mathcalO(nq)\)的暴力,拿下\(20\)分。感觉用数据结构难以维护,考虑根号做法。根号做法有一个阈值\(L\),然后分讨(钦定\(len_x\lelen_y\)):\(len_x\lelen_y\leL\)直接暴力做,时间复杂度\(\mathcalO(L)\)。\(L......
  • 李宏毅《机器学习》总结 - RNN & LSTM
    在slot-filling问题(如给一个句子,自己分析出时间、地点等)如果只连着不同的FC,那么会导致无法读出是arrive还是leave的情况,导致错误因此,需要NN来考虑到整个句子的信息,也就是需要有memory,这就是RNNRNN原理有了memory,就可以初步解决同一个信息由于句子不同导致的意......
  • IDEA2022 解决每次启动新项目maven配置就变为C盘问题
    1、打开一个空的IDEA如果打开IDEA默认进入之前的项目,可以选择先Closeproject退出项目 2、选择左侧的Customize,再点击Configure 3、在打开的Setting设置里面找到Maven配置Build,Execution,Deployment->BuildTools->Maven 修改后,保存即可; ......