리더보드 1.51736점 코드 공개 (ResNet 기반 모델)

  • day2020.05.14 16:54
  • views1565 views
  • language Python
  • writerby GoldBar
댓글 18
이 코드는 시스템 자원을 매우 많이 필요로 합니다. 시스템 자원이 부족할 경우 학습 데이터를 작게 나눠 여러개의 모델을 만든 후 앙상블을 하면 비슷한 결과를 볼 수 있습니다. 학습에 사용되지 않은 1909개의 데이터로 가채점 결과 1.40393점이 나왔으나 리더보드 제출 결과 1.51736점로 예상 점수와 많은 차이를 보였습니다.
코드
댓글 18개
  • 민석성민석 2020.05.14 20:01

    감사합니다

  • 정배endgame 2020.05.14 23:45

    감사합니다!

  • NNSuperSunkist 2020.05.19 02:27

    삭제된 댓글입니다

  • NN핑크퐁 2020.05.21 00:36

    좋은 글 감사합니다. "강수량을 예측할 지점에서 멀리 있는 데이터일 수록 영향이 적어져 풀링레이어가 결과 예측에 방해가 될 것으로 판단" 이라는 아이디어가 흥미롭네요. 혹시 이를 해결하기 위해서 어떤 접근법을 사용하셨나요?

    • 은일GoldBar 2020.05.25 23:38

      처음에는 오토인코더, U-net으로 접근하였는데 생각보다 결과가 좋지 않았습니다. 그러다 강수량 예측에는 강수지점의 데이터가 중요하지 멀리 떨어진 곳의 데이터는 크게 중요하지 않을거라는 가설을 세웠습니다. 가설이 맞다면 차원축소를 거치지 않은 모델이 차원 축소를 거친 모델보다 성능이 좋을 것입니다. 그래서 컨볼루션 레이어만을 이용하여 모델을 만들고 적은 양의 데이터로 학습 시킨 결과 1.65점정도의 결과를 얻을 수 있었습니다.

    • 은일GoldBar 2020.05.21 06:21

      그후 차원을 건들지 않는 선에서 여러가지 모델을 만들어봤고 그 중에서 이미 검증된 ResNet을 활용한 모델이 좋은 결과를 얻었습니다. ResNet 말고도 Inception등을 이용하여 다양한 모델들도 비슷한 성능을 볼 수 있고 다양한 모델을 앙상블할 수록 더 좋은 결과를 얻을 수 있습니다.

    • NN핑크퐁 2020.05.21 10:38

      좋은 인사이트 감사합니다.

  • 성조뭉뭉 2020.05.22 00:33

    일반적으로는 convolution을 진행하면서 feature map을 서서히 늘려가면서 마지막 레이어에서 1개로 줄이는 과정을 취하는데, 위 모델에서는 256 -> 128 -> 64 -> 32 -> 1 로 서서히 줄이신 이유가 있을까요? 실험적인 결과인가요 ?

    • 은일GoldBar 2020.05.22 01:32

      보통 pooling을 거치면서 축소된 차원에대한 보상(?)으로 feature map을 늘리는데 여기선 pooling이 없어서 feature map을 늘려갈 필요는 없을거같습니다. 256->128->64->32로 줄인건 마음에 안정감(?)이 드는 숫자라 선택하였습니다.

    • 성조뭉뭉 2020.05.22 02:32

      아.. 그런 착안점이군요. 혹시 마지막으로 앙상블 개수와 앙상블 전후의 결과값을 알 수 있을까요?

    • 은일GoldBar 2020.05.22 06:07

      리더보드 스코어는 확인을 못해봤고 교차검증을 통해 만들어진 5개의 모델을 자체 테스트 결과는 본문에 있는데 각 코델은 1.43전후로 나왔고 소프트보팅 결과 1.4점이 나왔고 리더보드에서 1.51점이 나왔습니다. 그후 Resnet과 Inception을 혼합한 모델 5개(1.44점전후)를 더 만들어 10개의 모델 앙상블 결과 리더보드 1.49점을 기록했습니다. 본문 모델 숫자만 봐꿔가며 앙상블해도 효과가 있을것으로 보이는데 시간관계상 더 이상의 진행은 못하고 있습니다.

    • 은일GoldBar 2020.05.22 06:15

      업로드 전 확인용 테스트셋과 검증셋에 대한 데이터 부풀리기를 하지 않은거라 학습데이터도 최대한 늘리면 조금더 성능이 좋아질 것으로 보이는데 시간이 문제네요.

    • 성조뭉뭉 2020.05.22 11:45

      아하 그렇군요 .. ! 인사이트 감사합니다

  • 문려지구본으로지구를 2020.05.25 08:36

    kernel size 를 1->2->3 으로 늘려주신 이유가 있으실까요?

    • 은일GoldBar 2020.05.25 10:48

      커널 사이즈 1로 주변에 영향을 안받은 피쳐맵을 생성하고 커널 사이즈를 키워나가며 조금씩 주변에 영향을 받은 피쳐맵을 추가해주었습니다. 커널사이즈가 처음부터 크게 시작하면 주변에 영향을 받은 데이터로 피쳐맵이 만들어져 그 후 영향을 안받은 피쳐맵을 생성할 수가 없어 커널 사이즈를 1->2->3으로 키웠습니다.

  • Jang Pierr 2020.05.25 22:04

    먼저 공부에 많은 도움이 되었습니다. 감사합니다. 그런데 저는 아래코드를 칠때 인덱스 에러가 뜨던데 어떻게 해결 하셨나요? x_train = x_train[np.sum((y_train_>= 50] y_train = y_train[np.sum((y_train_>= 50] x_train.shape, y_train.shape (위 코드 실행시 인덱스 에러 발생. np는 1차원이고 x_train은 4차원이라서 에러가 발생한다고 생각하고 있습니다.) IndexError: too many indices for array

    • 은일GoldBar 2020.05.25 22:40

      이전 셀에서 y_train_ 가 정확히 작성 되었는지 확인해봐야할 것같습니다. (y_train이 있고 y_train_가 있습니다.) 코드가 모두 정확히 작성되었다면 정상적으로 작동 될거에요.

    • Jang Pierr 2020.05.25 22:45

      네 알겠습니다. 감사합니다.

로그인이 필요합니다
목록으로
이전 글
0 vote
191 views
댓글 0
20일 전
현재 글

리더보드 1.51736점 코드 공개 (ResNet 기반 모델)

대회 - 위성관측 데이터 활용 강수량 산출 AI 경진대회

25 vote
1,565 views
댓글 17
19일 전
다음 글

[Baseline][XGBoost][Heatmap]

대회 - 생체 광학 데이터 분석 AI 경진대회

18 vote
1,710 views
댓글 6
15일 전