일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 플로이드 와샬
- pytorch
- 백트래킹
- 세그먼트 트리
- DP
- 가끔은_말로
- 조합론
- dropout
- 너비 우선 탐색
- back propagation
- 자바스크립트
- c++
- object detection
- tensorflow
- 분할 정복
- 가끔은 말로
- BFS
- 문자열
- NEXT
- dfs
- 회고록
- 크루스칼
- 알고리즘
- lazy propagation
- 우선 순위 큐
- 2023
- 이분 탐색
- 다익스트라
- Overfitting
- 미래는_현재와_과거로
- Today
- Total
목록pytorch (10)
Doby's Lab
🤔 Problem오랜만에 PyTorch 관련 글입니다. 최근에는 Generative Model 쪽을 공부하면서 DDPM을 구현하다가 PyTorch의 새로운 기능을 발견했는데요. 바로 오늘 글의 주제가 되는 self.register_buffer()입니다. 본 포스트는 예전에 작성한 포스트들 중에 'nn.Parameter(), 이걸 써야 하는 이유가 뭘까? (tensor와 명백하게 다른 점)'라는 포스트의 후속 편이 되기도 합니다. 이전 포스트의 내용을 간략하게 리뷰해 보면 '모델 내에서 단순히 torch.tensor()를 통해 선언한 텐서는 학습의 대상이 되지 못하고, 이를 명확하게 모델 내 학습을 하는 파라미터로 정의하기 위해서는 nn.Parameter()로 감싸서 추가적으로 선언해야 한다.'라는 내..
🤔 Problem모델을 학습하다가 이상하게 스케줄러에 대한 출력(Learning Rate에 대한 변경 출력)이 없어서 이에 대해 verbose를 True로 바꿔주려고 작업할 내용을 확인하기 위해 공식 문서를 들어가 봤다가 아래 내용을 확인했습니다.😀 Solution이제는 스케줄러에 대해서 verbose argument를 지원하지 않겠다는 내용이었습니다. 하지만, 스케줄러에 대한 메서드 get_last_lr()을 사용해 보라고 합니다. 이 메서드는 스케줄러가 마지막으로 계산한 Learning Rate를 출력하며, 이는 '현재 에포크에서 어떠한 Learning Rate로 학습을 진행하게 되는가'를 의미합니다. 그래서, 아래 내용으로 잘 확인이 되는지를 실험하기 위해 간단한 코드를 만들어줬습니다. 매 에포..
🤔 Problem작업을 하다가 DataLoader를 선언하는 코드 부분에서 처음 보는 Argument가 있었습니다. 이 Argument에 대해서 공부를 하면서 '이건 언젠가 유용하게 쓰일 기능이다!'라고 판단이 들어 글을 기록하게 되었습니다. 우리는 대부분 모델에 학습을 시킬 때, 각 샘플의 shape이 거의 다 같도록 전처리를 해서 학습을 시키기 때문에 사실 이 기능이 흔하게 쓰이지는 않을 것입니다. 하지만, 특수한 경우에는 각 데이터 샘플의 shape이 똑같이 처리될 수 없는 경우들이 있습니다. 예를 들어, Object Detection에 관한 프로젝트를 한다고 가정하면, 각 이미지에 대해 Bounding Box의 수가 모두 같나요? 거의 대부분 그렇지는 않습니다. 이러한 상황에 대해서 하나의 데이..
🤔 ProblemPyTorch에서 자주 쓰는 메서드들은 어느 정도 체득하면서 빠르게 핸들링할 수 있도록 하는 것이 좋은 거 같습니다. 이번 글은 그러한 메서드들 중에 자주 쓰이는 torch.where()에 대해서 정리해 보았습니다. 사실은 매우 간단합니다만, 완전히 체득을 해두는 게 앞으로 작업에 편할 거 같아서 일부러 글을 씁니다.out = torch.where(condition, input, other)condition은 BoolTensor입니다. True와 False만을 담고 있으며, True인 element 자리에 input이 들어가고, False인 element 자리에 other이 들어가게 됩니다.1. condition은 Boolean Masking으로 나타내기보통 condition은 원래의 ..
🤔 Problem오늘 다루어볼 문제는 어찌 보면 예전부터 궁금했으나 그에 대한 답을 감각적으로만 알고 있었고, 문제점으로 다루었을 때 어려울 것이라 예상했었기에 조금 미루어왔던 주제입니다. 오늘의 문제를 정의하기 전에 이것부터 얘기해 봅시다. 우리는 일반적으로 모델을 학습시킬 때, 배치 단위로 학습을 시킵니다. 그러면 예를 들어서 Input Tensor가 (4, 2)의 shape을 가진다고 했을 때, Batch Size가 16이라 해봅시다. 실제로 모델에 들어가게 되는 Input Tensor의 shape은 (16, 4, 2)가 될 것입니다. 이때, 모델의 Weight가 Batch Size에 따라서 똑같이 (16, weight shape)로 변하나요? 아닙니다. 그대로 (weight shape)을 유지하..
🤔 Problem문득 예전에 ViT를 구현해 놓은 코드를 보다가 그런 생각을 했습니다. '내가 저기서 nn.Parameter()를 왜 썼더라?' 지금 생각해 보면, 그냥 tensor를 써도 똑같은 코드일 텐데 말입니다. 이때 당시에 Attention을 구현하면서 Query, Key, Value를 만들어내기 위한 목적으로 Weight Matrix가 필요했었고, 여러 오픈 소스를 참고하면서 구현하다가 무심하게 썼었던 기억이 납니다.class ScaledDotProductAttention(nn.Module): def __init__(self, embedding_length, qkv_vec_length): ''' embedding_length : embedding 하나의 길이 -..
🤔 Problem이번에 ResNet을 PyTorch로 직접 구현해 보면서 약간의 의구심(?)이 들었던 부분이 있습니다. Residual Connection을 구현할 때 크게 2가지 방법으로 구현을 하는데, '두 코드 모두 Residual Connection을 수행하는가?'가 의문이자 이번 포스팅에서 알아내고 싶은 문제점입니다. + 코드에 대해서만 다룰 것이니 Residual Connection에 대한 개념의 언급은 따로 없습니다. 첫 번째 코드는 torchvision 라이브러리 내에 ResNet을 구현해 둔 소스코드입니다.해당 코드에서는 identity = x와 같은 방법으로 복사를 합니다.( https://github.com/pytorch/vision/blob/main/torchvision/model..
✅ Intro LLaVA-Med를 공부하면서 Visual Encoder로 CLIP(Contrastive Language-Image Pre-training)이 사용되어 이번 기회에 공부를 해보았습니다. CLIP은 기존 Classification 방식에서 새로운 메커니즘을 제안했습니다. Classification은 수많은 데이터셋에서 라벨링 된 클래스로 분류하는 것이 일반적인 특징입니다. 하지만, 세상에는 여러 가지 사물이 존재하며, 이 사물 또한 어떠한 상태에 있냐에 따라 분류를 할 수 있는 범위는 셀 수 없을 정도로 많습니다. 예를 들어, '일반적인 자전거'와 '바퀴가 없는 자전거'라는 Task로 수많은 사물들이 더 디테일한 description을 원할 때, 단순한 Classification Task만으..