03.13 (월)


Coding Test Study

그리디 알고리즘이란 바로 눈앞의 이익만을 생각하는 알고리즘을 말한다.
대부분의 경우에는 뛰어난 결과를 반환하지 못하지만, 드물게 최적해를 보장하는 경우도 있다.
그리디 알고리즘이 잘 동작하는 문제는 탐욕 선택 속성을 같고 있는 최적 부분 구조인 문제들이다.
탐욕 선택 속성이란 앞의 선택이 이후 선택에 영향을 주지 않는 것을 말한다.
그래서 그리디 알고리즘은 선택을 다시 고려하지 않는다.

그리디 문제를 해결하는 과정에서 itertools 라이브러리의 conbinations(조합) 모듈을 사용 했는데 itertools의 Combinatoric iterators의 사용 예시를 추가로 작성하였다.

Link - Combinatoric iterators

오늘의 회고

Pytorch의 기본에 대해 학습하였다. Pytorch에는 행렬 연산을 지원해주는 모듈들이 많았고,
내가 원하는 결과를 얻기 위해 임의의 tensor를 곱하는 과정을 아는 것이 중요했다.
일단은 numpy, 행렬 부분을 확실히 학습하는 것이 중요하다고 크게 느껴졌다.


03.14 (화)


Pytorch Custom Model 제작

pytorch의 nn.module을 커스텀하여 원하는 모델을 제작하는 학습을 하였습니다.

pytorch 레퍼런스 문서를 읽으면서 함께 학습 하는 과정이라 학습량이 매우 많아서 1 ~ 2일정도 계속 열심히 해야 할것 같습니다.

오늘의 회고

모델을 구성하는 과정에서 Python Object Oriented Programming 개념이 많이 사용되어서 확실하게 학습을 하고 넘어가야 할 것 같습니다.


03.15 (수)


Pytorch Custom Model 과제 완료

pytorch의 nn.module을 커스텀하여 원하는 모델을 제작하는 과제를 완료했습니다

hook 개념이 어려움을 겪었습니다.

문제가 해결되고 생각해보니 hook자체 개념보다 oop개념을 어려워해서 어렵게 느껴지게 되었던것 같습니다.

오늘의 회고

주말에 custuom model 복습을 하며 oop부분을 정리 해야 될것 같습니다.


03.16 (목)


Custom Dataset 및 Custom DataLoader 생성 과제 완료

Dataset을 로드해서 class CustomDataset(Dataset)를 생성하는 과정을 학습하였습니다.

class CustomDataSet(Dataset):

  • def __init__(self, ): - 데이터의 위치나 파일명과 같은 초기화 작업을 하는 구역
  • def __len__(self): - Data의 최대 요소 수를 반환
  • def __getitem__(self, idx): - 데이터셋의 idx번째 데이터를 반환

전체적으로는 이런 구성이였습니다.

[오류 해결]

  • RuntimeError: DataLoader worker (pid(s) 12696) exited unexpectedly

    torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=None,
                                sampler=None, batch_sampler=None, num_workers=0,
                                collate_fn=None, pin_memory=False, drop_last=False,
                                timeout=0, worker_init_fn=None,
                                multiprocessing_context=None, generator=None, *,
                                prefetch_factor=None, persistent_workers=False,
                                pin_memory_device='')
    

    num_workers ( int , optional ) – 데이터 로드에 사용할 하위 프로세스 수입니다. 0데이터가 기본 프로세스에서 로드됨을 의미합니다. (기본값:0)

    num_worker = 4 * num_GPU을 권장하는 것 같지만 과제를 진행하면서 colab의 환경과 맥북의 cpu차이 때문에 오류가 발생하던것이였다.

    정리하자면 위의 오류는 작업자(worker)가 강제 종료되어 생긴 오류이기 때문에, num_workers 매개 변수를 낮추거나, 더 좋은 하드웨어를 사용하여 해결할 수 있다.

    또한 DataLoader의 문제가 아닌 데이터 로드 과정에서 발생한 오류일 수도 있으므로, 데이터 로드 과정을 다시 확인해 보는 것도 권장된다.

오늘의 회고

과제는 길고 주어진 시간은 짧게 느꼈졌던 4일이 끝났습니다.

Custom Model과 Custom Dataset 및 Custom DataLoader 생성을 완벽하게 이해하는 데에는 짧은 시간이었던 것 같습니다.

과제를 통해 배워가면서 모르는게 더 많아 진것 같습니다. 특히 oop개념이 취약한 것을 느꼈습니다.

그 부분에 대해서 따로 코드를 가져와서 중단점 디버깅을 통해서 코드의 흐름을 파악하려고 했지만, 클래스, 객체, 상속 개념을 완벽히 이해하는 데 부족한 점이 있었고 이 때문에 흐름의 이해에 더 어려움을 겪었던 것 같습니다.

나중에 정답 코드가 제공되면 내가 작성했던 코드와 비교해보며 학습을 다시 해보아야 할 것 같습니다.

과제가 끝내고 조금이나마 여유를 찾으니 이제야 이상적인(?) TIL이 쓰이는 것 같습니다. 🥕🥕🥕


03.17(금)


한 주 정리 및 회고

이번주 과제🦆 해설시간을 오피스 아워에서 가졌습니다.

gather()에 관한 부분 설명은 이해하기 어려운 부분이 있었습니다. 2차원 개념에서는 이해가 수월했지만 3차원 이상일 경우에는 좀 어렵게 느껴지는 것 같습니다.

마지막 조교님께서 인공지능을 바텀업으로 공부하는 것도 나쁜것은 아니지만 모든 것을 바텀업으로 하기에는 너무 어렵고 시간이 많이 필요하므로, 일단은 내가 사용해보고 유의미한 성능 증가 등을 이루게 되면 어떻게 작동하는 지 공부하는 탑 다운 방식도 중요하다고 한것이 기억에 남았습니다.

블로그에 대해

과제를 진행하며 pytorch에서 발생하는 에러들을 찾아가며 해결했습니다. 이러한 해결 과정을 담은 게시판을 만드는 것도 좋을 것이라는 생각이 들었고 가까운 시일내에 오류 정리 게시판을 만들어야겠습니다 🔥🔥🔥


주말에 정리할 개념 :

OOP

hook()

squeeze()

gather()

댓글남기기