{
  "id": 248073,
  "title": "各位通常都花了epoch才确定最终准确率的？",
  "url": "/competitions/classify-leaves/discussion/248073",
  "author_name": "",
  "post_date": "2021-06-22T10:46:03.196280300Z",
  "votes": null,
  "comment_count": 9,
  "views": 0,
  "content": "<p>感觉我用的resnet收敛的特别慢 50个epoch是不是太少？继续训练感觉要花很久的样子，跑50个大概花了3个小时的样子。。。</p>",
  "messages": [
    {
      "id": "1360777",
      "postDate": "06/22/2021 10:46:03",
      "content": "<p>感觉我用的resnet收敛的特别慢 50个epoch是不是太少？继续训练感觉要花很久的样子，跑50个大概花了3个小时的样子。。。</p>",
      "rawMarkdown": "感觉我用的resnet收敛的特别慢 50个epoch是不是太少？继续训练感觉要花很久的样子，跑50个大概花了3个小时的样子。。。",
      "votes": null
    },
    {
      "id": "1360789",
      "postDate": "06/22/2021 10:59:13",
      "content": "<p>另外，为什么训练的时候，测试集的准确率会突然剧烈的下降（比如从0.5-&gt;0.07），感觉很摸不着头脑，有可能是哪些原因导致的呢？</p>",
      "rawMarkdown": "另外，为什么训练的时候，测试集的准确率会突然剧烈的下降（比如从0.5->0.07），感觉很摸不着头脑，有可能是哪些原因导致的呢？",
      "votes": null
    },
    {
      "id": "1360834",
      "postDate": "06/22/2021 11:34:06",
      "content": "<p>如果你用pretrained的模型, 你要注意是不是有过拟合的. 收敛慢的话可以考虑增加LR,  通过使用一些<a href=\"https://www.kaggle.com/isbhargav/guide-to-pytorch-learning-rate-scheduling\" target=\"_blank\">LR_scheduler</a>来辅助. </p>\n<p>对于测试准确率震荡的话, 有可能你要关注下你切割训练集和测试集的方法是否合理. 而且accuracy并不是唯一标准, 最好就是看 train的loss 和 validation的loss. 两者如果差别太大, 就表明train set和validation set差别太大.  这次如果做cross validation可以考虑用 <a href=\"https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html\" target=\"_blank\">StratifiedKFold</a>来分分开. </p>\n<p>还有一个可能就是需要一个更合理的sampler,可以试试<a href=\"https://catalyst-team.github.io/catalyst/api/data.html#:~:text=Sampler%20initialisation.-,BalanceClassSampler,-CLASS\" target=\"_blank\">BalanceClassSampler</a></p>",
      "rawMarkdown": "如果你用pretrained的模型, 你要注意是不是有过拟合的. 收敛慢的话可以考虑增加LR,  通过使用一些[LR_scheduler](https://www.kaggle.com/isbhargav/guide-to-pytorch-learning-rate-scheduling)来辅助. \n\n对于测试准确率震荡的话, 有可能你要关注下你切割训练集和测试集的方法是否合理. 而且accuracy并不是唯一标准, 最好就是看 train的loss 和 validation的loss. 两者如果差别太大, 就表明train set和validation set差别太大.  这次如果做cross validation可以考虑用 [StratifiedKFold](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html)来分分开. \n\n还有一个可能就是需要一个更合理的sampler,可以试试[BalanceClassSampler](https://catalyst-team.github.io/catalyst/api/data.html#:~:text=Sampler%20initialisation.-,BalanceClassSampler,-CLASS)",
      "votes": null
    },
    {
      "id": "1361646",
      "postDate": "06/23/2021 01:47:32",
      "content": "<p>我用预训练的resnet50加上两个FC, adaDelta和lr_scheduler在单精度下跑了9小时(300+epoch)才到85%😨. 我是第一次做深度学习,我也好奇别人训练的时候是怎么样的</p>",
      "rawMarkdown": "我用预训练的resnet50加上两个FC, adaDelta和lr_scheduler在单精度下跑了9小时(300+epoch)才到85%😨. 我是第一次做深度学习,我也好奇别人训练的时候是怎么样的",
      "votes": null
    },
    {
      "id": "1361863",
      "postDate": "06/23/2021 05:20:45",
      "content": "<ol>\n<li><p>应该是学习率的问题吧，我同样也用resnet50，配上默认的adam，图像增强仅用了保守的水平翻转，批量64，无lr_scheduler, 10个epoch 后验证集能稳定到 90+，30个epoch到93左右</p></li>\n<li><p>在1基础上近模型换成resnest50，其他不变，30个 epoch 到 95+</p></li>\n</ol>\n<p>3.在2基础上再加上一些tricks，25个 epoch 左右：<br>\n   a.  强一点的图像增强（新加上下翻转，正负90度旋转）<br>\n   b.  优化器用 adamw + 4e-5的weight-dacay，学习率调低到 4e-5<br>\n   c.  加上 CosineAnnealingLR 进下学习率递减<br>\n   d.  加上 LabelSmoothing<br>\n   单模型在验证集上准确率能到 98+，在 public board 上会再低一点；后续使用多个模型集成投票的话，应该能够到 98</p>\n<p>-- epoch 25 时候，train 和 dev 上准确率、loss 数据<br>\n（因为用的了loss实现的 smoothLabel，train的loss和标准的交叉熵有区别，dev是torch标准的交叉熵损失函数）</p>\n<p>train: correct num 6320.0, item num 6384 , train acc 0.9899749159812927, train loss 0.8657920360565186.</p>\n<p>dev: total_currect 2698, total_num 2753, dev acc 0.9800217944061025, dev loss 0.17343606054782867</p>",
      "rawMarkdown": "1. 应该是学习率的问题吧，我同样也用resnet50，配上默认的adam，图像增强仅用了保守的水平翻转，批量64，无lr_scheduler, 10个epoch 后验证集能稳定到 90+，30个epoch到93左右\n\n2. 在1基础上近模型换成resnest50，其他不变，30个 epoch 到 95+\n\n3.在2基础上再加上一些tricks，25个 epoch 左右：\n   a.  强一点的图像增强（新加上下翻转，正负90度旋转）\n   b.  优化器用 adamw + 4e-5的weight-dacay，学习率调低到 4e-5\n   c.  加上 CosineAnnealingLR 进下学习率递减\n   d.  加上 LabelSmoothing\n   单模型在验证集上准确率能到 98+，在 public board 上会再低一点；后续使用多个模型集成投票的话，应该能够到 98\n\n-- epoch 25 时候，train 和 dev 上准确率、loss 数据\n（因为用的了loss实现的 smoothLabel，train的loss和标准的交叉熵有区别，dev是torch标准的交叉熵损失函数）\n\ntrain: correct num 6320.0, item num 6384 , train acc 0.9899749159812927, train loss 0.8657920360565186.\n\ndev: total_currect 2698, total_num 2753, dev acc 0.9800217944061025, dev loss 0.17343606054782867",
      "votes": null
    },
    {
      "id": "1361876",
      "postDate": "06/23/2021 05:26:44",
      "content": "<p>可能因为数值稳定性问题，模型蹦了，很可能是优化器和学习率不合适<br>\n即使res18，用默认的 adam 试试，一般前2-3个 epoch，验证集准确率能轻松到 50+<br>\n另：同一个模型，不同优化器的合适学习率是不一样的</p>",
      "rawMarkdown": "可能因为数值稳定性问题，模型蹦了，很可能是优化器和学习率不合适\n即使res18，用默认的 adam 试试，一般前2-3个 epoch，验证集准确率能轻松到 50+\n另：同一个模型，不同优化器的合适学习率是不一样的",
      "votes": null
    },
    {
      "id": "1362594",
      "postDate": "06/23/2021 14:28:45",
      "content": "<p>resnet50 200个epoch = = 貌似有点多</p>",
      "rawMarkdown": "resnet50 200个epoch = = 貌似有点多",
      "votes": null
    },
    {
      "id": "1362598",
      "postDate": "06/23/2021 14:32:41",
      "content": "<p>同学你剔除相同的图片了吗，俺在你的1.描述里居然要160多epoch才验证集0.95</p>",
      "rawMarkdown": "同学你剔除相同的图片了吗，俺在你的1.描述里居然要160多epoch才验证集0.95",
      "votes": null
    },
    {
      "id": "1363731",
      "postDate": "06/24/2021 10:00:37",
      "content": "<p>没有剔除，160 epoch 可能是以下几个原因：<br>\n1、学习率对于学习器比较小，我用的adam，默认学习率<br>\n2、batch size 太大了，导致每个epoch迭代次数很少，我用的64<br>\n3、没有用预训练的模型微调，需要设定 (pre_train=True)</p>",
      "rawMarkdown": "没有剔除，160 epoch 可能是以下几个原因：\n1、学习率对于学习器比较小，我用的adam，默认学习率\n2、batch size 太大了，导致每个epoch迭代次数很少，我用的64\n3、没有用预训练的模型微调，需要设定 (pre_train=True)",
      "votes": null
    },
    {
      "id": "1365607",
      "postDate": "06/25/2021 23:32:54",
      "content": "<p>为什么我用resnet18，用的sgd，lr是0.001，最后加了一个线性层，xavier初始化，训练的时候最后一层用了100<em>lr，或者10</em>lr，其他的用lr，效果都不明显，一直跑10epochs之后，基本就稳定在0.5左右，即使跑1000+ epochs之后最多也是只能到0.7。。。。想不太明白</p>",
      "rawMarkdown": "为什么我用resnet18，用的sgd，lr是0.001，最后加了一个线性层，xavier初始化，训练的时候最后一层用了100*lr，或者10*lr，其他的用lr，效果都不明显，一直跑10epochs之后，基本就稳定在0.5左右，即使跑1000+ epochs之后最多也是只能到0.7。。。。想不太明白",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1360789,
      "author_name": "chaunceypeng",
      "author_url": "",
      "post_date": "06/22/2021 10:59:13",
      "content": "<p>另外，为什么训练的时候，测试集的准确率会突然剧烈的下降（比如从0.5-&gt;0.07），感觉很摸不着头脑，有可能是哪些原因导致的呢？</p>",
      "votes": null,
      "replies": [
        {
          "id": 1361876,
          "author_name": "niangaopx",
          "author_url": "",
          "post_date": "06/23/2021 05:26:44",
          "content": "<p>可能因为数值稳定性问题，模型蹦了，很可能是优化器和学习率不合适<br>\n即使res18，用默认的 adam 试试，一般前2-3个 epoch，验证集准确率能轻松到 50+<br>\n另：同一个模型，不同优化器的合适学习率是不一样的</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1360834,
      "author_name": "sheepwang",
      "author_url": "",
      "post_date": "06/22/2021 11:34:06",
      "content": "<p>如果你用pretrained的模型, 你要注意是不是有过拟合的. 收敛慢的话可以考虑增加LR,  通过使用一些<a href=\"https://www.kaggle.com/isbhargav/guide-to-pytorch-learning-rate-scheduling\" target=\"_blank\">LR_scheduler</a>来辅助. </p>\n<p>对于测试准确率震荡的话, 有可能你要关注下你切割训练集和测试集的方法是否合理. 而且accuracy并不是唯一标准, 最好就是看 train的loss 和 validation的loss. 两者如果差别太大, 就表明train set和validation set差别太大.  这次如果做cross validation可以考虑用 <a href=\"https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html\" target=\"_blank\">StratifiedKFold</a>来分分开. </p>\n<p>还有一个可能就是需要一个更合理的sampler,可以试试<a href=\"https://catalyst-team.github.io/catalyst/api/data.html#:~:text=Sampler%20initialisation.-,BalanceClassSampler,-CLASS\" target=\"_blank\">BalanceClassSampler</a></p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1361646,
      "author_name": "hsiungfei",
      "author_url": "",
      "post_date": "06/23/2021 01:47:32",
      "content": "<p>我用预训练的resnet50加上两个FC, adaDelta和lr_scheduler在单精度下跑了9小时(300+epoch)才到85%😨. 我是第一次做深度学习,我也好奇别人训练的时候是怎么样的</p>",
      "votes": null,
      "replies": [
        {
          "id": 1361863,
          "author_name": "niangaopx",
          "author_url": "",
          "post_date": "06/23/2021 05:20:45",
          "content": "<ol>\n<li><p>应该是学习率的问题吧，我同样也用resnet50，配上默认的adam，图像增强仅用了保守的水平翻转，批量64，无lr_scheduler, 10个epoch 后验证集能稳定到 90+，30个epoch到93左右</p></li>\n<li><p>在1基础上近模型换成resnest50，其他不变，30个 epoch 到 95+</p></li>\n</ol>\n<p>3.在2基础上再加上一些tricks，25个 epoch 左右：<br>\n   a.  强一点的图像增强（新加上下翻转，正负90度旋转）<br>\n   b.  优化器用 adamw + 4e-5的weight-dacay，学习率调低到 4e-5<br>\n   c.  加上 CosineAnnealingLR 进下学习率递减<br>\n   d.  加上 LabelSmoothing<br>\n   单模型在验证集上准确率能到 98+，在 public board 上会再低一点；后续使用多个模型集成投票的话，应该能够到 98</p>\n<p>-- epoch 25 时候，train 和 dev 上准确率、loss 数据<br>\n（因为用的了loss实现的 smoothLabel，train的loss和标准的交叉熵有区别，dev是torch标准的交叉熵损失函数）</p>\n<p>train: correct num 6320.0, item num 6384 , train acc 0.9899749159812927, train loss 0.8657920360565186.</p>\n<p>dev: total_currect 2698, total_num 2753, dev acc 0.9800217944061025, dev loss 0.17343606054782867</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1362598,
          "author_name": "bamboopu1996",
          "author_url": "",
          "post_date": "06/23/2021 14:32:41",
          "content": "<p>同学你剔除相同的图片了吗，俺在你的1.描述里居然要160多epoch才验证集0.95</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1363731,
          "author_name": "niangaopx",
          "author_url": "",
          "post_date": "06/24/2021 10:00:37",
          "content": "<p>没有剔除，160 epoch 可能是以下几个原因：<br>\n1、学习率对于学习器比较小，我用的adam，默认学习率<br>\n2、batch size 太大了，导致每个epoch迭代次数很少，我用的64<br>\n3、没有用预训练的模型微调，需要设定 (pre_train=True)</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1362594,
      "author_name": "bamboopu1996",
      "author_url": "",
      "post_date": "06/23/2021 14:28:45",
      "content": "<p>resnet50 200个epoch = = 貌似有点多</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1365607,
      "author_name": "xinghen",
      "author_url": "",
      "post_date": "06/25/2021 23:32:54",
      "content": "<p>为什么我用resnet18，用的sgd，lr是0.001，最后加了一个线性层，xavier初始化，训练的时候最后一层用了100<em>lr，或者10</em>lr，其他的用lr，效果都不明显，一直跑10epochs之后，基本就稳定在0.5左右，即使跑1000+ epochs之后最多也是只能到0.7。。。。想不太明白</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1360777": "感觉我用的resnet收敛的特别慢 50个epoch是不是太少？继续训练感觉要花很久的样子，跑50个大概花了3个小时的样子。。。",
    "1360789": "另外，为什么训练的时候，测试集的准确率会突然剧烈的下降（比如从0.5->0.07），感觉很摸不着头脑，有可能是哪些原因导致的呢？",
    "1360834": "如果你用pretrained的模型, 你要注意是不是有过拟合的. 收敛慢的话可以考虑增加LR,  通过使用一些[LR_scheduler](https://www.kaggle.com/isbhargav/guide-to-pytorch-learning-rate-scheduling)来辅助. \n\n对于测试准确率震荡的话, 有可能你要关注下你切割训练集和测试集的方法是否合理. 而且accuracy并不是唯一标准, 最好就是看 train的loss 和 validation的loss. 两者如果差别太大, 就表明train set和validation set差别太大.  这次如果做cross validation可以考虑用 [StratifiedKFold](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html)来分分开. \n\n还有一个可能就是需要一个更合理的sampler,可以试试[BalanceClassSampler](https://catalyst-team.github.io/catalyst/api/data.html#:~:text=Sampler%20initialisation.-,BalanceClassSampler,-CLASS)",
    "1361646": "我用预训练的resnet50加上两个FC, adaDelta和lr_scheduler在单精度下跑了9小时(300+epoch)才到85%😨. 我是第一次做深度学习,我也好奇别人训练的时候是怎么样的",
    "1361863": "1. 应该是学习率的问题吧，我同样也用resnet50，配上默认的adam，图像增强仅用了保守的水平翻转，批量64，无lr_scheduler, 10个epoch 后验证集能稳定到 90+，30个epoch到93左右\n\n2. 在1基础上近模型换成resnest50，其他不变，30个 epoch 到 95+\n\n3.在2基础上再加上一些tricks，25个 epoch 左右：\n   a.  强一点的图像增强（新加上下翻转，正负90度旋转）\n   b.  优化器用 adamw + 4e-5的weight-dacay，学习率调低到 4e-5\n   c.  加上 CosineAnnealingLR 进下学习率递减\n   d.  加上 LabelSmoothing\n   单模型在验证集上准确率能到 98+，在 public board 上会再低一点；后续使用多个模型集成投票的话，应该能够到 98\n\n-- epoch 25 时候，train 和 dev 上准确率、loss 数据\n（因为用的了loss实现的 smoothLabel，train的loss和标准的交叉熵有区别，dev是torch标准的交叉熵损失函数）\n\ntrain: correct num 6320.0, item num 6384 , train acc 0.9899749159812927, train loss 0.8657920360565186.\n\ndev: total_currect 2698, total_num 2753, dev acc 0.9800217944061025, dev loss 0.17343606054782867",
    "1361876": "可能因为数值稳定性问题，模型蹦了，很可能是优化器和学习率不合适\n即使res18，用默认的 adam 试试，一般前2-3个 epoch，验证集准确率能轻松到 50+\n另：同一个模型，不同优化器的合适学习率是不一样的",
    "1362594": "resnet50 200个epoch = = 貌似有点多",
    "1362598": "同学你剔除相同的图片了吗，俺在你的1.描述里居然要160多epoch才验证集0.95",
    "1363731": "没有剔除，160 epoch 可能是以下几个原因：\n1、学习率对于学习器比较小，我用的adam，默认学习率\n2、batch size 太大了，导致每个epoch迭代次数很少，我用的64\n3、没有用预训练的模型微调，需要设定 (pre_train=True)",
    "1365607": "为什么我用resnet18，用的sgd，lr是0.001，最后加了一个线性层，xavier初始化，训练的时候最后一层用了100*lr，或者10*lr，其他的用lr，效果都不明显，一直跑10epochs之后，基本就稳定在0.5左右，即使跑1000+ epochs之后最多也是只能到0.7。。。。想不太明白"
  },
  "source": "meta"
}