{
  "id": 99538,
  "title": "lb 0.96까지의 과정",
  "url": "/competitions/2019-3rd-ml-month-with-kakr/discussion/99538",
  "author_name": "saewonYang",
  "post_date": "2019-07-12T04:41:30.752000",
  "votes": 37,
  "comment_count": 17,
  "views": 0,
  "content": "<p>다른 분들은 대회를 진행할 때 어떤 순서로 진행하는지는 모르겠습니다.\n<br>\n저도 많은 경험은 안해봤지만, 다른 잘하시는 분들의 kernel이나 discussion을 읽고, 혹은 코세라의 캐글 강의를 보고 얻은 정보를 짧게나마 공유해보려 합니다. 초보자가 이제 막 캐글 진입한 분들께 드리는 작은 조언이라고 생각해주세요.\n<br>\n보통 딥러닝 대회는 자원의 한계 때문에 진입하기가 매우 힘듭니다. 하지만 object detection 같이 dataset 크기가 크지 않다면 kaggle kernel만으로도 충분히 가능합니다. 머신러닝은 당연히 kaggle kernel로만 가능하구요.\n<br>\n1. 주피터 노트북은 eda와 baseline 작성 용도로만 사용하는 것이 좋습니다. \n제가 public에 작성한 커널만 봐도 코드 길이가 꽤 됩니다. 저기에 uda라든지 여러가지 추가하면 굉장히 작업하기가 힘들다는걸 느끼실 수 있을겁니다.\n<br>\n<a href=\"https://www.kaggle.com/lopuhin/imet-2019-submission\">https://www.kaggle.com/lopuhin/imet-2019-submission</a>\n이런식으로 local에서 작업한 script를 encoding, decoding 과정을 거쳐 캐글 커널로 올려서 학습할 수 있습니다. 다만 학습 진행 상황을 육안으로 확인할 수 없어서 fitting 시키기 매우 힘듭니다.\n<br>\n2. 대회 metric에 대해서 철저하게 분석하고 들어가는게 좋습니다. 저도 이제 막 느끼는 중인데요. loss function이나 metric 부분을 잘 건드린다면 충분히 score를 높일 수 있는 부분이 있습니다. 최근에 열렸던 toxic 대회에서 이 부분을 안 건드려서 참패했던 경험이 있네요. 보통 discussion 보면 누군가는 metric에 대해서 상세하게 설명을 해놓았을겁니다.\n<br>\n3. eda와 몇몇 커널 필사해보면서 대회 감을 익힙니다. \n<br>\n4. 머신러닝이든 딥러닝이든 model은 무조건 고정합니다. 저 같은 경우 딥러닝은 resnet50으로 고정합니다. 고정된 상태에서 baseline을 작성합니다. baseline이라고 하면, 학습부터 제출까지 단 한번의 commit으로 가능한걸 전 baseline이라고 생각합니다.\n<br>\n5. earlystopping 기준을 loss에서 cv score로 변경합니다. 이 대회는 f1 score가 되겠네요. loss와 score가 같은 방향으로 가지 않을때만 다른 기준을 찾는 것이 좋다고 합니다. 이 대회는 cv score와 lb score가 consistent한 축에 속하는 아주 쉬운 대회입니다. 옆동네 blind detection 실전 대회만 하더라도 train과 test셋 분포가 달라서 어떻게 할지 모르겠네요.\n<br>\n6. 모델이 고정된 상태에서 여러가지 실험을 합니다. 적절한 augmentation은 무엇인지, 적절한 image size는 어떻게 되는지. fold 수를 어떻게 할건지, 혹은 tta를 어떻게 하는게 좋을지. 그리고 optimizer에 맞는 초기 learning rate와 scheduler를 고릅니다.\n<br>\n7. resnet50으로 최대한 끌어올렸다면 더 깊은 모델을 사용해봅니다. 보통 깊은 모델 사용만해도 score가 많이 오릅니다.\n<br>\n8. 앙상블을 간단하게 시도해봅니다.\n<br>\n9. 다시 처음으로 되돌아가 eda도 해보고, kernel, discussion 읽어보면서 insight를 얻으려고 노력합니다.\n<br>\n10. 무한 반복..\n<br>\n제가 틀릴수도 있다고 생각합니다. 다른 의견 있으시면 알려주세요 ㅎㅎ 공유하는 문화가 있었으면 좋겠습니다.\n참고로 lb 0.96은 특별한 trick 하나도 사용 안했구요.  그저 fitting 잘시키려고 노력했습니다. 8fold + 4fold 앙상블 정도 했습니다.\nunsupervised data augmentation은 시도해봤는데, 20 epoch 학습에 거의 8시간 걸려서 포기했습니다. 이어서 하기엔 너무 시간 소비가 커서요 ㅜㅜ 혹시 학습해 보신분 계시면 조언 부탁드립니다.</p>",
  "messages": [
    {
      "id": 573286,
      "postDate": "2019-07-12T04:41:30.753Z",
      "content": "<p>다른 분들은 대회를 진행할 때 어떤 순서로 진행하는지는 모르겠습니다.\n<br>\n저도 많은 경험은 안해봤지만, 다른 잘하시는 분들의 kernel이나 discussion을 읽고, 혹은 코세라의 캐글 강의를 보고 얻은 정보를 짧게나마 공유해보려 합니다. 초보자가 이제 막 캐글 진입한 분들께 드리는 작은 조언이라고 생각해주세요.\n<br>\n보통 딥러닝 대회는 자원의 한계 때문에 진입하기가 매우 힘듭니다. 하지만 object detection 같이 dataset 크기가 크지 않다면 kaggle kernel만으로도 충분히 가능합니다. 머신러닝은 당연히 kaggle kernel로만 가능하구요.\n<br>\n1. 주피터 노트북은 eda와 baseline 작성 용도로만 사용하는 것이 좋습니다. \n제가 public에 작성한 커널만 봐도 코드 길이가 꽤 됩니다. 저기에 uda라든지 여러가지 추가하면 굉장히 작업하기가 힘들다는걸 느끼실 수 있을겁니다.\n<br>\n<a href=\"https://www.kaggle.com/lopuhin/imet-2019-submission\">https://www.kaggle.com/lopuhin/imet-2019-submission</a>\n이런식으로 local에서 작업한 script를 encoding, decoding 과정을 거쳐 캐글 커널로 올려서 학습할 수 있습니다. 다만 학습 진행 상황을 육안으로 확인할 수 없어서 fitting 시키기 매우 힘듭니다.\n<br>\n2. 대회 metric에 대해서 철저하게 분석하고 들어가는게 좋습니다. 저도 이제 막 느끼는 중인데요. loss function이나 metric 부분을 잘 건드린다면 충분히 score를 높일 수 있는 부분이 있습니다. 최근에 열렸던 toxic 대회에서 이 부분을 안 건드려서 참패했던 경험이 있네요. 보통 discussion 보면 누군가는 metric에 대해서 상세하게 설명을 해놓았을겁니다.\n<br>\n3. eda와 몇몇 커널 필사해보면서 대회 감을 익힙니다. \n<br>\n4. 머신러닝이든 딥러닝이든 model은 무조건 고정합니다. 저 같은 경우 딥러닝은 resnet50으로 고정합니다. 고정된 상태에서 baseline을 작성합니다. baseline이라고 하면, 학습부터 제출까지 단 한번의 commit으로 가능한걸 전 baseline이라고 생각합니다.\n<br>\n5. earlystopping 기준을 loss에서 cv score로 변경합니다. 이 대회는 f1 score가 되겠네요. loss와 score가 같은 방향으로 가지 않을때만 다른 기준을 찾는 것이 좋다고 합니다. 이 대회는 cv score와 lb score가 consistent한 축에 속하는 아주 쉬운 대회입니다. 옆동네 blind detection 실전 대회만 하더라도 train과 test셋 분포가 달라서 어떻게 할지 모르겠네요.\n<br>\n6. 모델이 고정된 상태에서 여러가지 실험을 합니다. 적절한 augmentation은 무엇인지, 적절한 image size는 어떻게 되는지. fold 수를 어떻게 할건지, 혹은 tta를 어떻게 하는게 좋을지. 그리고 optimizer에 맞는 초기 learning rate와 scheduler를 고릅니다.\n<br>\n7. resnet50으로 최대한 끌어올렸다면 더 깊은 모델을 사용해봅니다. 보통 깊은 모델 사용만해도 score가 많이 오릅니다.\n<br>\n8. 앙상블을 간단하게 시도해봅니다.\n<br>\n9. 다시 처음으로 되돌아가 eda도 해보고, kernel, discussion 읽어보면서 insight를 얻으려고 노력합니다.\n<br>\n10. 무한 반복..\n<br>\n제가 틀릴수도 있다고 생각합니다. 다른 의견 있으시면 알려주세요 ㅎㅎ 공유하는 문화가 있었으면 좋겠습니다.\n참고로 lb 0.96은 특별한 trick 하나도 사용 안했구요.  그저 fitting 잘시키려고 노력했습니다. 8fold + 4fold 앙상블 정도 했습니다.\nunsupervised data augmentation은 시도해봤는데, 20 epoch 학습에 거의 8시간 걸려서 포기했습니다. 이어서 하기엔 너무 시간 소비가 커서요 ㅜㅜ 혹시 학습해 보신분 계시면 조언 부탁드립니다.</p>",
      "rawMarkdown": "다른 분들은 대회를 진행할 때 어떤 순서로 진행하는지는 모르겠습니다.\n<br>\n저도 많은 경험은 안해봤지만, 다른 잘하시는 분들의 kernel이나 discussion을 읽고, 혹은 코세라의 캐글 강의를 보고 얻은 정보를 짧게나마 공유해보려 합니다. 초보자가 이제 막 캐글 진입한 분들께 드리는 작은 조언이라고 생각해주세요.\n<br>\n보통 딥러닝 대회는 자원의 한계 때문에 진입하기가 매우 힘듭니다. 하지만 object detection 같이 dataset 크기가 크지 않다면 kaggle kernel만으로도 충분히 가능합니다. 머신러닝은 당연히 kaggle kernel로만 가능하구요.\n<br>\n1. 주피터 노트북은 eda와 baseline 작성 용도로만 사용하는 것이 좋습니다. \n제가 public에 작성한 커널만 봐도 코드 길이가 꽤 됩니다. 저기에 uda라든지 여러가지 추가하면 굉장히 작업하기가 힘들다는걸 느끼실 수 있을겁니다.\n<br>\nhttps://www.kaggle.com/lopuhin/imet-2019-submission\n이런식으로 local에서 작업한 script를 encoding, decoding 과정을 거쳐 캐글 커널로 올려서 학습할 수 있습니다. 다만 학습 진행 상황을 육안으로 확인할 수 없어서 fitting 시키기 매우 힘듭니다.\n<br>\n2. 대회 metric에 대해서 철저하게 분석하고 들어가는게 좋습니다. 저도 이제 막 느끼는 중인데요. loss function이나 metric 부분을 잘 건드린다면 충분히 score를 높일 수 있는 부분이 있습니다. 최근에 열렸던 toxic 대회에서 이 부분을 안 건드려서 참패했던 경험이 있네요. 보통 discussion 보면 누군가는 metric에 대해서 상세하게 설명을 해놓았을겁니다.\n<br>\n3. eda와 몇몇 커널 필사해보면서 대회 감을 익힙니다. \n<br>\n4. 머신러닝이든 딥러닝이든 model은 무조건 고정합니다. 저 같은 경우 딥러닝은 resnet50으로 고정합니다. 고정된 상태에서 baseline을 작성합니다. baseline이라고 하면, 학습부터 제출까지 단 한번의 commit으로 가능한걸 전 baseline이라고 생각합니다.\n<br>\n5. earlystopping 기준을 loss에서 cv score로 변경합니다. 이 대회는 f1 score가 되겠네요. loss와 score가 같은 방향으로 가지 않을때만 다른 기준을 찾는 것이 좋다고 합니다. 이 대회는 cv score와 lb score가 consistent한 축에 속하는 아주 쉬운 대회입니다. 옆동네 blind detection 실전 대회만 하더라도 train과 test셋 분포가 달라서 어떻게 할지 모르겠네요.\n<br>\n6. 모델이 고정된 상태에서 여러가지 실험을 합니다. 적절한 augmentation은 무엇인지, 적절한 image size는 어떻게 되는지. fold 수를 어떻게 할건지, 혹은 tta를 어떻게 하는게 좋을지. 그리고 optimizer에 맞는 초기 learning rate와 scheduler를 고릅니다.\n<br>\n7. resnet50으로 최대한 끌어올렸다면 더 깊은 모델을 사용해봅니다. 보통 깊은 모델 사용만해도 score가 많이 오릅니다.\n<br>\n8. 앙상블을 간단하게 시도해봅니다.\n<br>\n9. 다시 처음으로 되돌아가 eda도 해보고, kernel, discussion 읽어보면서 insight를 얻으려고 노력합니다.\n<br>\n10. 무한 반복..\n<br>\n제가 틀릴수도 있다고 생각합니다. 다른 의견 있으시면 알려주세요 ㅎㅎ 공유하는 문화가 있었으면 좋겠습니다.\n참고로 lb 0.96은 특별한 trick 하나도 사용 안했구요.  그저 fitting 잘시키려고 노력했습니다. 8fold + 4fold 앙상블 정도 했습니다.\nunsupervised data augmentation은 시도해봤는데, 20 epoch 학습에 거의 8시간 걸려서 포기했습니다. 이어서 하기엔 너무 시간 소비가 커서요 ㅜㅜ 혹시 학습해 보신분 계시면 조언 부탁드립니다.",
      "votes": 35
    },
    {
      "id": 576718,
      "postDate": "2019-07-15T23:18:12.287Z",
      "content": "<p>와우 멋집니다. 이게 바로 대회의 목적 아닌가 싶은 생각이 듭니다. 추천 10개 드리고 싶네요.</p>",
      "rawMarkdown": "와우 멋집니다. 이게 바로 대회의 목적 아닌가 싶은 생각이 듭니다. 추천 10개 드리고 싶네요.",
      "votes": 1,
      "replies": [
        {
          "id": 576987,
          "postDate": "2019-07-16T08:22:13.737Z",
          "content": "<p>앞으로도 다같이 공부하는 대회가 될 수 있다면 좋겠네요 ㅎㅎ</p>",
          "rawMarkdown": "앞으로도 다같이 공부하는 대회가 될 수 있다면 좋겠네요 ㅎㅎ",
          "votes": 1
        }
      ]
    },
    {
      "id": 573304,
      "postDate": "2019-07-12T05:17:00.807Z",
      "content": "<p>너무 좋은 공유 감사드립니다. ㅎ</p>\n\n<p>저도 거의 비슷한 과정을 거쳐서 정하네요 ㅎ   blind 는 너무 피곤하군요 ㅋㅋㅋ</p>\n\n<p>하나하나씩 조건을 바꿔가며 길을 찾아가는 것이 정말 중요한거 같습니다.</p>\n\n<p>한번에 하나씩 바꾸고, 하나씩 인사이트 얻어가며 차곡차곡 메달을 향해 달려갑시당</p>",
      "rawMarkdown": "너무 좋은 공유 감사드립니다. ㅎ\n\n저도 거의 비슷한 과정을 거쳐서 정하네요 ㅎ   blind 는 너무 피곤하군요 ㅋㅋㅋ\n\n하나하나씩 조건을 바꿔가며 길을 찾아가는 것이 정말 중요한거 같습니다.\n\n한번에 하나씩 바꾸고, 하나씩 인사이트 얻어가며 차곡차곡 메달을 향해 달려갑시당",
      "votes": 1,
      "replies": [
        {
          "id": 573305,
          "postDate": "2019-07-12T05:27:35.123Z",
          "content": "<p>저도 항상 좋은 말씀 감사합니다 ㅎㅎ blind는 할게 너무 많네요 ㅜㅜ.. 그래도 킵고잉!</p>",
          "rawMarkdown": "저도 항상 좋은 말씀 감사합니다 ㅎㅎ blind는 할게 너무 많네요 ㅜㅜ.. 그래도 킵고잉!"
        }
      ]
    },
    {
      "id": 573501,
      "postDate": "2019-07-12T10:53:22.733Z",
      "content": "<p>감사합니다. 많은 고민과 공부의 흔적을 볼 수 있는 글이네요. \n나중에 저도 컴페티션 한번 끼워 주시면 감사히 배우도록 하겠습니다. 😆😆😆</p>",
      "rawMarkdown": "감사합니다. 많은 고민과 공부의 흔적을 볼 수 있는 글이네요. \n나중에 저도 컴페티션 한번 끼워 주시면 감사히 배우도록 하겠습니다. 😆😆😆",
      "votes": 2,
      "replies": [
        {
          "id": 573564,
          "postDate": "2019-07-12T12:23:22.007Z",
          "content": "<p>팀 해주시면 제가 영광이죠 ㅜㅜ 대회 준비하느라 고생하셨습니다 :)</p>",
          "rawMarkdown": "팀 해주시면 제가 영광이죠 ㅜㅜ 대회 준비하느라 고생하셨습니다 :)"
        }
      ]
    },
    {
      "id": 602685,
      "postDate": "2019-08-19T11:45:25.097Z",
      "content": "<p>처음 캐글 적응할 수 있도록 도와주셔서 너무 감사합니다! a/s 까지 완벽하게 피드백 해주시고~ 복 많이 받으실 겁니다^^</p>",
      "rawMarkdown": "처음 캐글 적응할 수 있도록 도와주셔서 너무 감사합니다! a/s 까지 완벽하게 피드백 해주시고~ 복 많이 받으실 겁니다^^",
      "replies": [
        {
          "id": 602701,
          "postDate": "2019-08-19T12:02:44.907Z",
          "content": "<p>감사합니다 :)</p>",
          "rawMarkdown": "감사합니다 :)"
        }
      ]
    },
    {
      "id": 592359,
      "postDate": "2019-08-05T07:35:49.123Z",
      "content": "<p>타이타닉 하나 해보고 커널 베이스라인 필사하다가 개인pc 주피터에서 학습하는데 9시간넘게 걸리는거 보고\n후덜덜해서 조금 멘붕상태로 어제뭐했지 했는데,,\n이 글보니 앞으로 뭘 시도해야할지 감이 약간 올 것같습니다. 조언감사드립니다!</p>",
      "rawMarkdown": "타이타닉 하나 해보고 커널 베이스라인 필사하다가 개인pc 주피터에서 학습하는데 9시간넘게 걸리는거 보고\n후덜덜해서 조금 멘붕상태로 어제뭐했지 했는데,,\n이 글보니 앞으로 뭘 시도해야할지 감이 약간 올 것같습니다. 조언감사드립니다!",
      "replies": [
        {
          "id": 592383,
          "postDate": "2019-08-05T08:06:56.377Z",
          "content": "<p>처음이시면 사용하시는 프레임워크에 맞는 커널 잡으시고 필사하시면서 감을 익히시면 좋을것 같습니다. 화이팅이요 :)</p>",
          "rawMarkdown": "처음이시면 사용하시는 프레임워크에 맞는 커널 잡으시고 필사하시면서 감을 익히시면 좋을것 같습니다. 화이팅이요 :)"
        }
      ]
    },
    {
      "id": 576949,
      "postDate": "2019-07-16T07:36:04.560Z",
      "content": "<p>감사합니다 혹시 metric을 건든다는 말이 무슨 말인지 잘 모르겠는데 질문드려도 될까요 </p>",
      "rawMarkdown": "감사합니다 혹시 metric을 건든다는 말이 무슨 말인지 잘 모르겠는데 질문드려도 될까요 ",
      "replies": [
        {
          "id": 576957,
          "postDate": "2019-07-16T07:50:14.777Z",
          "content": "<p>제가 알기로는 이 대회에서  keras 기준으로요.\n model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['acc', f1_score])\n이것처럼 f1_scroe  함수를 만들어 metrics 포함시키고</p>\n\n<p>Earlystop 하는 Callback  에서 'val_f1_scroe'를 기준으로  Stop  하신다는 의미로 보이네요.</p>\n\n<p>만약 다른 평가기준이 필요하다면 같은 방식으로 또 추가하면 되고요.</p>",
          "rawMarkdown": "제가 알기로는 이 대회에서  keras 기준으로요.\n model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['acc', f1_score])\n이것처럼 f1_scroe  함수를 만들어 metrics 포함시키고\n\nEarlystop 하는 Callback  에서 'val_f1_scroe'를 기준으로  Stop  하신다는 의미로 보이네요.\n\n만약 다른 평가기준이 필요하다면 같은 방식으로 또 추가하면 되고요.",
          "votes": 2
        },
        {
          "id": 576991,
          "postDate": "2019-07-16T08:24:49.340Z",
          "content": "<p>Jang님이 말씀하신게 맞습니다. public kernel로 제가 공개한 코드를 보면 early stopping 기준을 f1_score로 설정해놨습니다. 보통은 training set에 overfit을 방지하기 위해서 validation loss가 가장 낮을때 weight를 저장하는데요, kaggle은 loss가 아니라 따로 명시한 metric으로 score를 메기기 떄문에 이를 기준으로 early stop한다면 test set으로 inference 했을 시에 일반적으로 더 높은 점수를 기대할 수 있습니다. </p>",
          "rawMarkdown": "Jang님이 말씀하신게 맞습니다. public kernel로 제가 공개한 코드를 보면 early stopping 기준을 f1_score로 설정해놨습니다. 보통은 training set에 overfit을 방지하기 위해서 validation loss가 가장 낮을때 weight를 저장하는데요, kaggle은 loss가 아니라 따로 명시한 metric으로 score를 메기기 떄문에 이를 기준으로 early stop한다면 test set으로 inference 했을 시에 일반적으로 더 높은 점수를 기대할 수 있습니다. ",
          "votes": 2
        },
        {
          "id": 576995,
          "postDate": "2019-07-16T08:28:44.173Z",
          "content": "<p>제가 오늘 이글 올라오기전까지 대회 설명 무시하고 loss 만 가지고... 하고 있었더라고요. 반성하고 있습니다.</p>",
          "rawMarkdown": "제가 오늘 이글 올라오기전까지 대회 설명 무시하고 loss 만 가지고... 하고 있었더라고요. 반성하고 있습니다.",
          "votes": 1
        },
        {
          "id": 577019,
          "postDate": "2019-07-16T08:46:39.653Z",
          "content": "<p>저도 얼마전까지 몰랐는데요, 이미지 대회 금메달 3개 있으신 pudae님께 이메일로 딥러닝 대회 노하우(?) 여쭤봤는데 친절하게 알려주셔서 저도 알게 됐습니다. 돌고돌아 knowledge share가 잘 됐으면 좋겠네요 ㅎㅎ</p>",
          "rawMarkdown": "저도 얼마전까지 몰랐는데요, 이미지 대회 금메달 3개 있으신 pudae님께 이메일로 딥러닝 대회 노하우(?) 여쭤봤는데 친절하게 알려주셔서 저도 알게 됐습니다. 돌고돌아 knowledge share가 잘 됐으면 좋겠네요 ㅎㅎ",
          "votes": 2
        }
      ]
    },
    {
      "id": 594088,
      "postDate": "2019-08-07T14:58:14.723Z",
      "rawMarkdown": "",
      "isDeleted": true,
      "replies": [
        {
          "id": 594363,
          "postDate": "2019-08-07T22:32:35.533Z",
          "content": "<p>ㅎㅎ 도움되셨다니 기분이 좋네요. 사실 프레임워크는 크게 차이 없는것 같습니다. 저도 free sound 대회는 keras 사용했는데 본질적인건 pytorch랑 같다고 생각해요 ㅋㅋㅋ 대회 화이팅하세요!</p>",
          "rawMarkdown": "ㅎㅎ 도움되셨다니 기분이 좋네요. 사실 프레임워크는 크게 차이 없는것 같습니다. 저도 free sound 대회는 keras 사용했는데 본질적인건 pytorch랑 같다고 생각해요 ㅋㅋㅋ 대회 화이팅하세요!"
        }
      ]
    }
  ],
  "comments": [
    {
      "id": 576718,
      "author_name": "Jang",
      "author_url": "",
      "post_date": "2019-07-15T23:18:12.287000",
      "content": "<p>와우 멋집니다. 이게 바로 대회의 목적 아닌가 싶은 생각이 듭니다. 추천 10개 드리고 싶네요.</p>",
      "votes": 1,
      "replies": [
        {
          "id": 576987,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-07-16T08:22:13.737000",
          "content": "<p>앞으로도 다같이 공부하는 대회가 될 수 있다면 좋겠네요 ㅎㅎ</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 573304,
      "author_name": "Youhan Lee",
      "author_url": "",
      "post_date": "2019-07-12T05:17:00.807000",
      "content": "<p>너무 좋은 공유 감사드립니다. ㅎ</p>\n\n<p>저도 거의 비슷한 과정을 거쳐서 정하네요 ㅎ   blind 는 너무 피곤하군요 ㅋㅋㅋ</p>\n\n<p>하나하나씩 조건을 바꿔가며 길을 찾아가는 것이 정말 중요한거 같습니다.</p>\n\n<p>한번에 하나씩 바꾸고, 하나씩 인사이트 얻어가며 차곡차곡 메달을 향해 달려갑시당</p>",
      "votes": 1,
      "replies": [
        {
          "id": 573305,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-07-12T05:27:35.123000",
          "content": "<p>저도 항상 좋은 말씀 감사합니다 ㅎㅎ blind는 할게 너무 많네요 ㅜㅜ.. 그래도 킵고잉!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 573501,
      "author_name": "TaeJin Kim",
      "author_url": "",
      "post_date": "2019-07-12T10:53:22.733000",
      "content": "<p>감사합니다. 많은 고민과 공부의 흔적을 볼 수 있는 글이네요. \n나중에 저도 컴페티션 한번 끼워 주시면 감사히 배우도록 하겠습니다. 😆😆😆</p>",
      "votes": 2,
      "replies": [
        {
          "id": 573564,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-07-12T12:23:22.007000",
          "content": "<p>팀 해주시면 제가 영광이죠 ㅜㅜ 대회 준비하느라 고생하셨습니다 :)</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 602685,
      "author_name": "Yuchul Byun",
      "author_url": "",
      "post_date": "2019-08-19T11:45:25.097000",
      "content": "<p>처음 캐글 적응할 수 있도록 도와주셔서 너무 감사합니다! a/s 까지 완벽하게 피드백 해주시고~ 복 많이 받으실 겁니다^^</p>",
      "votes": 0,
      "replies": [
        {
          "id": 602701,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-08-19T12:02:44.907000",
          "content": "<p>감사합니다 :)</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 592359,
      "author_name": "HyeonhoJi",
      "author_url": "",
      "post_date": "2019-08-05T07:35:49.123000",
      "content": "<p>타이타닉 하나 해보고 커널 베이스라인 필사하다가 개인pc 주피터에서 학습하는데 9시간넘게 걸리는거 보고\n후덜덜해서 조금 멘붕상태로 어제뭐했지 했는데,,\n이 글보니 앞으로 뭘 시도해야할지 감이 약간 올 것같습니다. 조언감사드립니다!</p>",
      "votes": 0,
      "replies": [
        {
          "id": 592383,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-08-05T08:06:56.377000",
          "content": "<p>처음이시면 사용하시는 프레임워크에 맞는 커널 잡으시고 필사하시면서 감을 익히시면 좋을것 같습니다. 화이팅이요 :)</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 576949,
      "author_name": "Footprint🐾",
      "author_url": "",
      "post_date": "2019-07-16T07:36:04.560000",
      "content": "<p>감사합니다 혹시 metric을 건든다는 말이 무슨 말인지 잘 모르겠는데 질문드려도 될까요 </p>",
      "votes": 0,
      "replies": [
        {
          "id": 576957,
          "author_name": "Jang",
          "author_url": "",
          "post_date": "2019-07-16T07:50:14.777000",
          "content": "<p>제가 알기로는 이 대회에서  keras 기준으로요.\n model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['acc', f1_score])\n이것처럼 f1_scroe  함수를 만들어 metrics 포함시키고</p>\n\n<p>Earlystop 하는 Callback  에서 'val_f1_scroe'를 기준으로  Stop  하신다는 의미로 보이네요.</p>\n\n<p>만약 다른 평가기준이 필요하다면 같은 방식으로 또 추가하면 되고요.</p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 576991,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-07-16T08:24:49.340000",
          "content": "<p>Jang님이 말씀하신게 맞습니다. public kernel로 제가 공개한 코드를 보면 early stopping 기준을 f1_score로 설정해놨습니다. 보통은 training set에 overfit을 방지하기 위해서 validation loss가 가장 낮을때 weight를 저장하는데요, kaggle은 loss가 아니라 따로 명시한 metric으로 score를 메기기 떄문에 이를 기준으로 early stop한다면 test set으로 inference 했을 시에 일반적으로 더 높은 점수를 기대할 수 있습니다. </p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 576995,
          "author_name": "Jang",
          "author_url": "",
          "post_date": "2019-07-16T08:28:44.173000",
          "content": "<p>제가 오늘 이글 올라오기전까지 대회 설명 무시하고 loss 만 가지고... 하고 있었더라고요. 반성하고 있습니다.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 577019,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-07-16T08:46:39.653000",
          "content": "<p>저도 얼마전까지 몰랐는데요, 이미지 대회 금메달 3개 있으신 pudae님께 이메일로 딥러닝 대회 노하우(?) 여쭤봤는데 친절하게 알려주셔서 저도 알게 됐습니다. 돌고돌아 knowledge share가 잘 됐으면 좋겠네요 ㅎㅎ</p>",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 594088,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-08-07T14:58:14.723000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 594363,
          "author_name": "saewonYang",
          "author_url": "",
          "post_date": "2019-08-07T22:32:35.533000",
          "content": "<p>ㅎㅎ 도움되셨다니 기분이 좋네요. 사실 프레임워크는 크게 차이 없는것 같습니다. 저도 free sound 대회는 keras 사용했는데 본질적인건 pytorch랑 같다고 생각해요 ㅋㅋㅋ 대회 화이팅하세요!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "573286": "다른 분들은 대회를 진행할 때 어떤 순서로 진행하는지는 모르겠습니다.\n<br>\n저도 많은 경험은 안해봤지만, 다른 잘하시는 분들의 kernel이나 discussion을 읽고, 혹은 코세라의 캐글 강의를 보고 얻은 정보를 짧게나마 공유해보려 합니다. 초보자가 이제 막 캐글 진입한 분들께 드리는 작은 조언이라고 생각해주세요.\n<br>\n보통 딥러닝 대회는 자원의 한계 때문에 진입하기가 매우 힘듭니다. 하지만 object detection 같이 dataset 크기가 크지 않다면 kaggle kernel만으로도 충분히 가능합니다. 머신러닝은 당연히 kaggle kernel로만 가능하구요.\n<br>\n1. 주피터 노트북은 eda와 baseline 작성 용도로만 사용하는 것이 좋습니다. \n제가 public에 작성한 커널만 봐도 코드 길이가 꽤 됩니다. 저기에 uda라든지 여러가지 추가하면 굉장히 작업하기가 힘들다는걸 느끼실 수 있을겁니다.\n<br>\nhttps://www.kaggle.com/lopuhin/imet-2019-submission\n이런식으로 local에서 작업한 script를 encoding, decoding 과정을 거쳐 캐글 커널로 올려서 학습할 수 있습니다. 다만 학습 진행 상황을 육안으로 확인할 수 없어서 fitting 시키기 매우 힘듭니다.\n<br>\n2. 대회 metric에 대해서 철저하게 분석하고 들어가는게 좋습니다. 저도 이제 막 느끼는 중인데요. loss function이나 metric 부분을 잘 건드린다면 충분히 score를 높일 수 있는 부분이 있습니다. 최근에 열렸던 toxic 대회에서 이 부분을 안 건드려서 참패했던 경험이 있네요. 보통 discussion 보면 누군가는 metric에 대해서 상세하게 설명을 해놓았을겁니다.\n<br>\n3. eda와 몇몇 커널 필사해보면서 대회 감을 익힙니다. \n<br>\n4. 머신러닝이든 딥러닝이든 model은 무조건 고정합니다. 저 같은 경우 딥러닝은 resnet50으로 고정합니다. 고정된 상태에서 baseline을 작성합니다. baseline이라고 하면, 학습부터 제출까지 단 한번의 commit으로 가능한걸 전 baseline이라고 생각합니다.\n<br>\n5. earlystopping 기준을 loss에서 cv score로 변경합니다. 이 대회는 f1 score가 되겠네요. loss와 score가 같은 방향으로 가지 않을때만 다른 기준을 찾는 것이 좋다고 합니다. 이 대회는 cv score와 lb score가 consistent한 축에 속하는 아주 쉬운 대회입니다. 옆동네 blind detection 실전 대회만 하더라도 train과 test셋 분포가 달라서 어떻게 할지 모르겠네요.\n<br>\n6. 모델이 고정된 상태에서 여러가지 실험을 합니다. 적절한 augmentation은 무엇인지, 적절한 image size는 어떻게 되는지. fold 수를 어떻게 할건지, 혹은 tta를 어떻게 하는게 좋을지. 그리고 optimizer에 맞는 초기 learning rate와 scheduler를 고릅니다.\n<br>\n7. resnet50으로 최대한 끌어올렸다면 더 깊은 모델을 사용해봅니다. 보통 깊은 모델 사용만해도 score가 많이 오릅니다.\n<br>\n8. 앙상블을 간단하게 시도해봅니다.\n<br>\n9. 다시 처음으로 되돌아가 eda도 해보고, kernel, discussion 읽어보면서 insight를 얻으려고 노력합니다.\n<br>\n10. 무한 반복..\n<br>\n제가 틀릴수도 있다고 생각합니다. 다른 의견 있으시면 알려주세요 ㅎㅎ 공유하는 문화가 있었으면 좋겠습니다.\n참고로 lb 0.96은 특별한 trick 하나도 사용 안했구요.  그저 fitting 잘시키려고 노력했습니다. 8fold + 4fold 앙상블 정도 했습니다.\nunsupervised data augmentation은 시도해봤는데, 20 epoch 학습에 거의 8시간 걸려서 포기했습니다. 이어서 하기엔 너무 시간 소비가 커서요 ㅜㅜ 혹시 학습해 보신분 계시면 조언 부탁드립니다.",
    "576718": "와우 멋집니다. 이게 바로 대회의 목적 아닌가 싶은 생각이 듭니다. 추천 10개 드리고 싶네요.",
    "573304": "너무 좋은 공유 감사드립니다. ㅎ\n\n저도 거의 비슷한 과정을 거쳐서 정하네요 ㅎ   blind 는 너무 피곤하군요 ㅋㅋㅋ\n\n하나하나씩 조건을 바꿔가며 길을 찾아가는 것이 정말 중요한거 같습니다.\n\n한번에 하나씩 바꾸고, 하나씩 인사이트 얻어가며 차곡차곡 메달을 향해 달려갑시당",
    "573501": "감사합니다. 많은 고민과 공부의 흔적을 볼 수 있는 글이네요. \n나중에 저도 컴페티션 한번 끼워 주시면 감사히 배우도록 하겠습니다. 😆😆😆",
    "602685": "처음 캐글 적응할 수 있도록 도와주셔서 너무 감사합니다! a/s 까지 완벽하게 피드백 해주시고~ 복 많이 받으실 겁니다^^",
    "592359": "타이타닉 하나 해보고 커널 베이스라인 필사하다가 개인pc 주피터에서 학습하는데 9시간넘게 걸리는거 보고\n후덜덜해서 조금 멘붕상태로 어제뭐했지 했는데,,\n이 글보니 앞으로 뭘 시도해야할지 감이 약간 올 것같습니다. 조언감사드립니다!",
    "576949": "감사합니다 혹시 metric을 건든다는 말이 무슨 말인지 잘 모르겠는데 질문드려도 될까요 ",
    "594088": ""
  }
}