{
  "id": 248931,
  "title": "【思路探讨】挑了17类比较难的叶子，发现验证集很难上90，挺有意思，数据量和类别数都只要原先10%，训练很快",
  "url": "/competitions/classify-leaves/discussion/248931",
  "author_name": "",
  "post_date": "2021-06-25T16:22:00.506065100Z",
  "votes": 3,
  "comment_count": 5,
  "views": 0,
  "content": "<p><strong>--  思路</strong><br>\n大体思路是，想利用今晚做后的时间，做一下essemble，但全部训练来不及了，于是想找一个难的子集单独训练，做essemble</p>\n<p>即最终提交想法是，原先 176类中，基础模型先预测一编，预测结果不在17类的直接作为最终结果；剩余预测17类的，再用第二个专用模型预测一编~</p>\n<p><strong>--  数据观察和试验</strong><br>\n于是在原先基础模型上（验证集 0.98， 公开榜 0.978）上，按照每个叶子类别单独观照【准确率，召回率】，挑出【准确率】 或 【召回率】其中有一个没上 90% 的类，于是筛选出 17 个类，对应全训练数据中 5592 样本。</p>\n<p>备注：176类中，验证集上，122 个类准召都是 100%</p>\n<p>因为数据量仅有10%，即使colab免费gpu训练很快，原模型参数设置，batch size 减半其他参数不变（数据少为了多迭代step），30个 epoch 跑下来，发现验证集准确率很难上 90%，最高到 89% 多点</p>\n<p>同时train上的acc也明显不如全量数据进行训练，全量数据train准确率能到 0.994+，17个类迭代完才 0.94不到点</p>\n<p><strong>--  想法</strong><br>\n感觉这些类才是这个比赛中，决定胜负的要素（简单的叶子类别大家都能对），同时小数据集确实对训练调参更友好~~</p>",
  "messages": [
    {
      "id": "1365344",
      "postDate": "06/25/2021 16:22:00",
      "content": "<p><strong>--  思路</strong><br>\n大体思路是，想利用今晚做后的时间，做一下essemble，但全部训练来不及了，于是想找一个难的子集单独训练，做essemble</p>\n<p>即最终提交想法是，原先 176类中，基础模型先预测一编，预测结果不在17类的直接作为最终结果；剩余预测17类的，再用第二个专用模型预测一编~</p>\n<p><strong>--  数据观察和试验</strong><br>\n于是在原先基础模型上（验证集 0.98， 公开榜 0.978）上，按照每个叶子类别单独观照【准确率，召回率】，挑出【准确率】 或 【召回率】其中有一个没上 90% 的类，于是筛选出 17 个类，对应全训练数据中 5592 样本。</p>\n<p>备注：176类中，验证集上，122 个类准召都是 100%</p>\n<p>因为数据量仅有10%，即使colab免费gpu训练很快，原模型参数设置，batch size 减半其他参数不变（数据少为了多迭代step），30个 epoch 跑下来，发现验证集准确率很难上 90%，最高到 89% 多点</p>\n<p>同时train上的acc也明显不如全量数据进行训练，全量数据train准确率能到 0.994+，17个类迭代完才 0.94不到点</p>\n<p><strong>--  想法</strong><br>\n感觉这些类才是这个比赛中，决定胜负的要素（简单的叶子类别大家都能对），同时小数据集确实对训练调参更友好~~</p>",
      "rawMarkdown": "**--  思路**\n大体思路是，想利用今晚做后的时间，做一下essemble，但全部训练来不及了，于是想找一个难的子集单独训练，做essemble\n\n即最终提交想法是，原先 176类中，基础模型先预测一编，预测结果不在17类的直接作为最终结果；剩余预测17类的，再用第二个专用模型预测一编~\n\n**--  数据观察和试验**\n于是在原先基础模型上（验证集 0.98， 公开榜 0.978）上，按照每个叶子类别单独观照【准确率，召回率】，挑出【准确率】 或 【召回率】其中有一个没上 90% 的类，于是筛选出 17 个类，对应全训练数据中 5592 样本。\n\n备注：176类中，验证集上，122 个类准召都是 100%\n\n因为数据量仅有10%，即使colab免费gpu训练很快，原模型参数设置，batch size 减半其他参数不变（数据少为了多迭代step），30个 epoch 跑下来，发现验证集准确率很难上 90%，最高到 89% 多点\n\n同时train上的acc也明显不如全量数据进行训练，全量数据train准确率能到 0.994+，17个类迭代完才 0.94不到点\n\n**--  想法**\n感觉这些类才是这个比赛中，决定胜负的要素（简单的叶子类别大家都能对），同时小数据集确实对训练调参更友好~~",
      "votes": null
    },
    {
      "id": "1365399",
      "postDate": "06/25/2021 17:17:15",
      "content": "<p>附上17个难的类<br>\n{'aesculus_glabra',<br>\n 'aesculus_pavi',<br>\n 'ailanthus_altissima',<br>\n 'cedrus_libani',<br>\n 'larix_decidua',<br>\n 'magnolia_stellata',<br>\n 'malus_hupehensis',<br>\n 'pinus_flexilis',<br>\n 'pinus_koraiensis',<br>\n 'pinus_nigra',<br>\n 'pinus_rigida',<br>\n 'pinus_strobus',<br>\n 'pinus_virginiana',<br>\n 'prunus_sargentii',<br>\n 'prunus_subhirtella',<br>\n 'prunus_virginiana',<br>\n 'quercus_muehlenbergii'}</p>",
      "rawMarkdown": "附上17个难的类\n{'aesculus_glabra',\n 'aesculus_pavi',\n 'ailanthus_altissima',\n 'cedrus_libani',\n 'larix_decidua',\n 'magnolia_stellata',\n 'malus_hupehensis',\n 'pinus_flexilis',\n 'pinus_koraiensis',\n 'pinus_nigra',\n 'pinus_rigida',\n 'pinus_strobus',\n 'pinus_virginiana',\n 'prunus_sargentii',\n 'prunus_subhirtella',\n 'prunus_virginiana',\n 'quercus_muehlenbergii'}",
      "votes": null
    },
    {
      "id": "1365657",
      "postDate": "06/26/2021 02:09:27",
      "content": "<p>ensemble , how did you do the ensemble, how do you distinguish most difficult class from the rest? hopefully you can share your code after competition for learning?<br>\n你是如何做ensemble?你是如何划分最困难的类？竞赛完了分享一下code? thanks!</p>",
      "rawMarkdown": "ensemble , how did you do the ensemble, how do you distinguish most difficult class from the rest? hopefully you can share your code after competition for learning?\n你是如何做ensemble?你是如何划分最困难的类？竞赛完了分享一下code? thanks!",
      "votes": null
    },
    {
      "id": "1365659",
      "postDate": "06/26/2021 02:11:30",
      "content": "<p>you picked up the accuracy not reaching 90% as your difficulty class? what a smart analysis!!!</p>",
      "rawMarkdown": "you picked up the accuracy not reaching 90% as your difficulty class? what a smart analysis!!!",
      "votes": null
    },
    {
      "id": "1365694",
      "postDate": "06/26/2021 03:28:04",
      "content": "<p>初衷是gpu不够，为了加速训练，code 很简单看下验证集，每个独立类别的准招(阈值选 0.9 只要是看中加速10倍训练速度并且收益最大)，但最终在这些hard的类别上，原模型 0.87+ 精度，新模型昨晚调一晚上没调很好也就 0.89，提升不大。基础模型非hard类 0.994 验证集精度。</p>\n<p>-- 缺点</p>\n<ol>\n<li><p>相比全量训练，其实这样也有一定损失，比如更小数据，使得模型较低的层，相比全量数据表征训练上没那么充分</p></li>\n<li><p>以及非hard类，会完全依赖基础模型，这种essemble提升只能靠对hard类提升来达到对总体提升</p></li>\n<li><p>一定程度增大在验证集上过拟合的风险</p></li>\n</ol>\n<p>-- 有点<br>\n好处真的是快:<br>\n1 . colab上 k80 的gpu，全量跑一遍 resnest50 要4个小时，兴趣最终单模型验证集精度能到 0.975+，训练集精度0.995+,提升空间有限，很难去调整参数；</p>\n<ol>\n<li><p>跑hard的17类，半小时能跑完，并且训练集精度 0.95， 验证集精度 0.90 ；可以快速试不同方法，比如更复杂模型、复杂的数据增强之类的</p></li>\n<li><p>全量数据，训练到一定epoch之后，一个 batch 中依然会存在，大量模型已经能分辨的非常好的简单类别的样本（这些样本梯度只是让简单类别 softmax的值 从0.99 -&gt; 1.0），真正难的类，即能带来信息增益的在batch中比例不是很高，从这点看，我觉得有些浪费计算资源</p></li>\n<li><p>这次比赛，resnest 50 模型本身能力有富裕的；但有的数据集很难，单模型表征存在困难（train上小怪不理想），这时这种划分通过两个模型进下分开表征，有可能降低bias的问题；另外对于模型本身复杂度已经足够的数据集，在hard子集上快速调参，实验奇妙方法，然后用这些参数和方法在全量数据集上重新训练模型，也是一种加上的思路吧</p></li>\n</ol>",
      "rawMarkdown": "初衷是gpu不够，为了加速训练，code 很简单看下验证集，每个独立类别的准招(阈值选 0.9 只要是看中加速10倍训练速度并且收益最大)，但最终在这些hard的类别上，原模型 0.87+ 精度，新模型昨晚调一晚上没调很好也就 0.89，提升不大。基础模型非hard类 0.994 验证集精度。\n\n-- 缺点\n1. 相比全量训练，其实这样也有一定损失，比如更小数据，使得模型较低的层，相比全量数据表征训练上没那么充分\n\n2. 以及非hard类，会完全依赖基础模型，这种essemble提升只能靠对hard类提升来达到对总体提升\n\n3. 一定程度增大在验证集上过拟合的风险\n\n-- 有点\n好处真的是快:\n1 . colab上 k80 的gpu，全量跑一遍 resnest50 要4个小时，兴趣最终单模型验证集精度能到 0.975+，训练集精度0.995+,提升空间有限，很难去调整参数；\n\n2. 跑hard的17类，半小时能跑完，并且训练集精度 0.95， 验证集精度 0.90 ；可以快速试不同方法，比如更复杂模型、复杂的数据增强之类的\n\n3. 全量数据，训练到一定epoch之后，一个 batch 中依然会存在，大量模型已经能分辨的非常好的简单类别的样本（这些样本梯度只是让简单类别 softmax的值 从0.99 -> 1.0），真正难的类，即能带来信息增益的在batch中比例不是很高，从这点看，我觉得有些浪费计算资源\n\n4. 这次比赛，resnest 50 模型本身能力有富裕的；但有的数据集很难，单模型表征存在困难（train上小怪不理想），这时这种划分通过两个模型进下分开表征，有可能降低bias的问题；另外对于模型本身复杂度已经足够的数据集，在hard子集上快速调参，实验奇妙方法，然后用这些参数和方法在全量数据集上重新训练模型，也是一种加上的思路吧",
      "votes": null
    },
    {
      "id": "1365727",
      "postDate": "06/26/2021 04:28:36",
      "content": "<p>我在比赛中途也有过这样的想法，后来意识到难训练是因为图片本身label错误，比如和其他图片冲突。所以专门去建一个模型去学这些错误率高的数据意义可能不大，除非认为test里面有完全一样的情况。这是个人理解，我最后也没去单独建个模型去验证，如有错误，请指正。</p>",
      "rawMarkdown": "我在比赛中途也有过这样的想法，后来意识到难训练是因为图片本身label错误，比如和其他图片冲突。所以专门去建一个模型去学这些错误率高的数据意义可能不大，除非认为test里面有完全一样的情况。这是个人理解，我最后也没去单独建个模型去验证，如有错误，请指正。",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1365399,
      "author_name": "niangaopx",
      "author_url": "",
      "post_date": "06/25/2021 17:17:15",
      "content": "<p>附上17个难的类<br>\n{'aesculus_glabra',<br>\n 'aesculus_pavi',<br>\n 'ailanthus_altissima',<br>\n 'cedrus_libani',<br>\n 'larix_decidua',<br>\n 'magnolia_stellata',<br>\n 'malus_hupehensis',<br>\n 'pinus_flexilis',<br>\n 'pinus_koraiensis',<br>\n 'pinus_nigra',<br>\n 'pinus_rigida',<br>\n 'pinus_strobus',<br>\n 'pinus_virginiana',<br>\n 'prunus_sargentii',<br>\n 'prunus_subhirtella',<br>\n 'prunus_virginiana',<br>\n 'quercus_muehlenbergii'}</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1365657,
      "author_name": "zanghf163com",
      "author_url": "",
      "post_date": "06/26/2021 02:09:27",
      "content": "<p>ensemble , how did you do the ensemble, how do you distinguish most difficult class from the rest? hopefully you can share your code after competition for learning?<br>\n你是如何做ensemble?你是如何划分最困难的类？竞赛完了分享一下code? thanks!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1365694,
          "author_name": "niangaopx",
          "author_url": "",
          "post_date": "06/26/2021 03:28:04",
          "content": "<p>初衷是gpu不够，为了加速训练，code 很简单看下验证集，每个独立类别的准招(阈值选 0.9 只要是看中加速10倍训练速度并且收益最大)，但最终在这些hard的类别上，原模型 0.87+ 精度，新模型昨晚调一晚上没调很好也就 0.89，提升不大。基础模型非hard类 0.994 验证集精度。</p>\n<p>-- 缺点</p>\n<ol>\n<li><p>相比全量训练，其实这样也有一定损失，比如更小数据，使得模型较低的层，相比全量数据表征训练上没那么充分</p></li>\n<li><p>以及非hard类，会完全依赖基础模型，这种essemble提升只能靠对hard类提升来达到对总体提升</p></li>\n<li><p>一定程度增大在验证集上过拟合的风险</p></li>\n</ol>\n<p>-- 有点<br>\n好处真的是快:<br>\n1 . colab上 k80 的gpu，全量跑一遍 resnest50 要4个小时，兴趣最终单模型验证集精度能到 0.975+，训练集精度0.995+,提升空间有限，很难去调整参数；</p>\n<ol>\n<li><p>跑hard的17类，半小时能跑完，并且训练集精度 0.95， 验证集精度 0.90 ；可以快速试不同方法，比如更复杂模型、复杂的数据增强之类的</p></li>\n<li><p>全量数据，训练到一定epoch之后，一个 batch 中依然会存在，大量模型已经能分辨的非常好的简单类别的样本（这些样本梯度只是让简单类别 softmax的值 从0.99 -&gt; 1.0），真正难的类，即能带来信息增益的在batch中比例不是很高，从这点看，我觉得有些浪费计算资源</p></li>\n<li><p>这次比赛，resnest 50 模型本身能力有富裕的；但有的数据集很难，单模型表征存在困难（train上小怪不理想），这时这种划分通过两个模型进下分开表征，有可能降低bias的问题；另外对于模型本身复杂度已经足够的数据集，在hard子集上快速调参，实验奇妙方法，然后用这些参数和方法在全量数据集上重新训练模型，也是一种加上的思路吧</p></li>\n</ol>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1365659,
      "author_name": "zanghf163com",
      "author_url": "",
      "post_date": "06/26/2021 02:11:30",
      "content": "<p>you picked up the accuracy not reaching 90% as your difficulty class? what a smart analysis!!!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1365727,
      "author_name": "yichaohan",
      "author_url": "",
      "post_date": "06/26/2021 04:28:36",
      "content": "<p>我在比赛中途也有过这样的想法，后来意识到难训练是因为图片本身label错误，比如和其他图片冲突。所以专门去建一个模型去学这些错误率高的数据意义可能不大，除非认为test里面有完全一样的情况。这是个人理解，我最后也没去单独建个模型去验证，如有错误，请指正。</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1365344": "**--  思路**\n大体思路是，想利用今晚做后的时间，做一下essemble，但全部训练来不及了，于是想找一个难的子集单独训练，做essemble\n\n即最终提交想法是，原先 176类中，基础模型先预测一编，预测结果不在17类的直接作为最终结果；剩余预测17类的，再用第二个专用模型预测一编~\n\n**--  数据观察和试验**\n于是在原先基础模型上（验证集 0.98， 公开榜 0.978）上，按照每个叶子类别单独观照【准确率，召回率】，挑出【准确率】 或 【召回率】其中有一个没上 90% 的类，于是筛选出 17 个类，对应全训练数据中 5592 样本。\n\n备注：176类中，验证集上，122 个类准召都是 100%\n\n因为数据量仅有10%，即使colab免费gpu训练很快，原模型参数设置，batch size 减半其他参数不变（数据少为了多迭代step），30个 epoch 跑下来，发现验证集准确率很难上 90%，最高到 89% 多点\n\n同时train上的acc也明显不如全量数据进行训练，全量数据train准确率能到 0.994+，17个类迭代完才 0.94不到点\n\n**--  想法**\n感觉这些类才是这个比赛中，决定胜负的要素（简单的叶子类别大家都能对），同时小数据集确实对训练调参更友好~~",
    "1365399": "附上17个难的类\n{'aesculus_glabra',\n 'aesculus_pavi',\n 'ailanthus_altissima',\n 'cedrus_libani',\n 'larix_decidua',\n 'magnolia_stellata',\n 'malus_hupehensis',\n 'pinus_flexilis',\n 'pinus_koraiensis',\n 'pinus_nigra',\n 'pinus_rigida',\n 'pinus_strobus',\n 'pinus_virginiana',\n 'prunus_sargentii',\n 'prunus_subhirtella',\n 'prunus_virginiana',\n 'quercus_muehlenbergii'}",
    "1365657": "ensemble , how did you do the ensemble, how do you distinguish most difficult class from the rest? hopefully you can share your code after competition for learning?\n你是如何做ensemble?你是如何划分最困难的类？竞赛完了分享一下code? thanks!",
    "1365659": "you picked up the accuracy not reaching 90% as your difficulty class? what a smart analysis!!!",
    "1365694": "初衷是gpu不够，为了加速训练，code 很简单看下验证集，每个独立类别的准招(阈值选 0.9 只要是看中加速10倍训练速度并且收益最大)，但最终在这些hard的类别上，原模型 0.87+ 精度，新模型昨晚调一晚上没调很好也就 0.89，提升不大。基础模型非hard类 0.994 验证集精度。\n\n-- 缺点\n1. 相比全量训练，其实这样也有一定损失，比如更小数据，使得模型较低的层，相比全量数据表征训练上没那么充分\n\n2. 以及非hard类，会完全依赖基础模型，这种essemble提升只能靠对hard类提升来达到对总体提升\n\n3. 一定程度增大在验证集上过拟合的风险\n\n-- 有点\n好处真的是快:\n1 . colab上 k80 的gpu，全量跑一遍 resnest50 要4个小时，兴趣最终单模型验证集精度能到 0.975+，训练集精度0.995+,提升空间有限，很难去调整参数；\n\n2. 跑hard的17类，半小时能跑完，并且训练集精度 0.95， 验证集精度 0.90 ；可以快速试不同方法，比如更复杂模型、复杂的数据增强之类的\n\n3. 全量数据，训练到一定epoch之后，一个 batch 中依然会存在，大量模型已经能分辨的非常好的简单类别的样本（这些样本梯度只是让简单类别 softmax的值 从0.99 -> 1.0），真正难的类，即能带来信息增益的在batch中比例不是很高，从这点看，我觉得有些浪费计算资源\n\n4. 这次比赛，resnest 50 模型本身能力有富裕的；但有的数据集很难，单模型表征存在困难（train上小怪不理想），这时这种划分通过两个模型进下分开表征，有可能降低bias的问题；另外对于模型本身复杂度已经足够的数据集，在hard子集上快速调参，实验奇妙方法，然后用这些参数和方法在全量数据集上重新训练模型，也是一种加上的思路吧",
    "1365727": "我在比赛中途也有过这样的想法，后来意识到难训练是因为图片本身label错误，比如和其他图片冲突。所以专门去建一个模型去学这些错误率高的数据意义可能不大，除非认为test里面有完全一样的情况。这是个人理解，我最后也没去单独建个模型去验证，如有错误，请指正。"
  },
  "source": "meta"
}