목록전체 글 (32)
아는 만큼 보인다

요번 ECG 리듬 분류 모델로 preactivated ResNet을 사용하고 있는데, 생각해보니 쓰고 있긴 하지만 ResNet 자체를 제대로 짚고 넘어간 적이 없는 것 같아, ResNet 과 preactivated ResNet을 순차적으로 리뷰해보려 한다. 특히, ECG 분류에 있어서 ResNet은 여러모로 무난하게 잘 작동하는 모델인 것 같다. Literature review를 해봐도 ResNet 을 사용한 논문이 많은 것 같았다. 시작! (참고로 ResNet이 해결하려는 문제가 무엇인지 분명히 짚고 가고자 서론이 좀 길다 ㅎㅎ) Deep Residual Learning for Image Recognition (link) ResNet이 해결하고자 하는 문제, ResNet의 동기 딥러닝 모델들이 개발되면..

데이터 분석/딥러닝 학습을 하다보면 기존에 공개되어 있는 docker image를 pull해서 사용하는 경우가 많다. 그리고 종종 개인적으로 필요한 패키지를 추가로 다운로드 받아서 나름대로 customize를 해서 이용하고 있다. 이미 customize가 꽤 진행된 docker container를 잃는 건 슬픈 일이다... docker container를 백업하는 방법을 알아보자. 참고: 아래의 명령어가 동작하지 않으면 모든 명령어 앞에 sudo를 붙여볼 것. 1. container ID 조회하기 docker container ls 아래 이미지에서 가장 좌측에 있는 것이 container ID이다. docker container가 켜져있지 않으면 start하도록 하자. docker start 조회한 co..
야심차게 모델링 코드를 짜고 훈련을 시작했다! 그런데 1 epoch을 돌리는데 하루 이상이 걸린다..? 가장 먼저, 원인 파악을 위해 GPU 사용 현황을 모니터링하러 가보자. 각 훈련 환경마다 GPU 모니터링 방법이 다를 수 있다. Ubuntu에서 GPU 모니터링하는 방법은 여기에 잘 소개되어 있다. 나는 회사에서 nvidia-smi로 항상 확인해주고 있다. nvidia-smi 결과를 잘 살펴보는 방법은 여기를 참조하면 된다. 즉, GPU-Util 같은 지표를 통해 GPU의 가용 성능 중 현재 얼마만큼 사용하고 있는지 확인해주면 된다. 100%인데 느리다? 그럼 모델의 문제일 것이고, 이 비율이 50% 정도 미만으로 확연히 낮다? 그럼 모델 외의 문제일 것이다. 1. 모델이 너무 크고 무겁진 않은가? G..

심전도가 심박수 아닌가요? (아닙니다) 본 글에서는 심전도를 이해하기 위한 배경 지식을 소개하려고 합니다. 심장은 어떻게 뛰나요? - 전기 자극으로요! 심장은 심장 혈액을 전신으로 내보내기 위해 수축과 이완 운동을 반복하는데요, 이러한 운동은 심장의 전기적 활동에 의해 유도됩니다. 심장은 스스로 전기 자극을 만들어 내고, 그 전기 자극이 이동하면서 심장 근육을 수축시킵니다. 전기 자극의 이동에 따라 심방과 심실이 적절한 시간과 강도로 수축/이완 활동을 하며 혈액을 전신으로 순환시킵니다. 심전도(electrocardiogram; ECG) 검사를 통해 심장의 전기적 활동을 엿볼 수 있습니다. 피부에 전극을 부착하여 심장에서 만들어내는 이러한 전기 자극의 흐름(전위의 변화)를 감지하는 검사가 바로 심전도 검사..
데이터 전처리를 하다보면, 여러 개의 함수를 연속적으로 사용해야 할 때가 있다. 데이터와 분석 목적에 따라 전처리 과정은 몹시 길 수도 있는데, 이것을 잘 정리해주지 않으면 오류가 발생하기 쉽고 비효율적인 코드가 되거나, 미래의 나와 팀원이 이해하기 어려운 코드가 될 수 있다. 이번 글에서는 method chaining을 통해 좀 더 간결하고 직관적으로 데이터 전처리 코드를 짜는 방법에 대해 알아보고자 한다. 예시와 함께 보도록 하자! 예시는 Iris dataset과 함께 살펴보도록 하겠다. Iris dataset의 table 구조는 다음과 같다. data = pd.read_csv('Iris.csv') data Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWid..

척도는 모델을 평가하기 위해 사용하는 값이다. 척도를 통해 모델의 성능을 비교하여 여러 모델 중 하나를 선택할 수도 있고, 기존 모델의 성능이 낮다면 이를 높이기 위해 다양한 대처를 해볼 수도 있다. 결국 잘 맞추면 되는 것 아닌가? 즉 정확도(accuracy)가 높으면 되는 것 아닌가? 라고 생각할 수도 있지만, 데이터의 특징이나 상황, 목적에 따라 다양한 척도가 사용될 수 있다. 척도에 대한 설명으로 바로 들어가기 전에, 분류 문제에 있어서 다음과 같은 confusion matrix를 그려볼 수 있다. Predicted/classified label 예측된/분류된 라벨 Negative Positive Actual label 실제 라벨 Negative True Negative 980 False Posi..
6월 18일 생애 두번째 코딩테스트를 보았다. 총 4문제가 출제되었으며, 좀 신기했던 것은 알고리즘 위주의 코딩테스트가 아니라 실제 직무와 연관된 코딩테스트가 나왔다는 점이다! 실제로 데이터 전처리와 관련된 문제도 나왔고, 기본적인 머신러닝 관련된 문제도 나왔다. 마지막은 일반적인 알고리즘 문제였던 것 같다. 일단은 데이터 분석에 필요한 지식/구현을 물어보는 문제가 나와서 다행이라고 생각했다. 아직 코딩테스트를 제대로 준비하지 못해서 "괜히 보는 걸까?"라는 후회도 했었는데 안봤으면 후회할 뻔 했다 ㅠㅠ 앞으로의 문제 경향도 파악해볼 수 있었고, 더욱 중요한 건 조금 자신감을 얻었다는 것? 테스트 케이스까지 추가해서 테스트했어도 여전히 틀린 부분이 있을 수 있겠지만, 혼자 테스트해봤을 때는 4문제 다 시..
프로그래머스 신규 아이디 추천 python3 문제 바로가기 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 이번에 기억해야할 것, list로 for loop 돌릴 때, pop()을 사용하는 것은 웬만하면 피하거나 무척 조심하도록 하자..! 특히, 해당 list에서 range(len(list))를 사용해서 인덱스로 루프를 도는데 바로 그 list에서 pop을 써버리면 index error가 발생하기 쉽다.. 그래서 웬만하면 빈 list를 다시 만들고 안에 value들을 다시 추가하는 방식으로 생각해보도록..