일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Pix2Pix
- 딥러닝손실함수
- CGAN
- shrinkmatch paper
- adamatch paper
- cifar100-c
- mme paper
- tent paper
- SSL
- remixmatch paper
- WGAN
- shrinkmatch
- 최린컴퓨터구조
- ConMatch
- mocov3
- dcgan
- dann paper
- simclrv2
- CycleGAN
- semi supervised learnin 가정
- Meta Pseudo Labels
- Entropy Minimization
- Pseudo Label
- GAN
- 컴퓨터구조
- CoMatch
- UnderstandingDeepLearning
- 백준 알고리즘
- BYOL
- conjugate pseudo label paper
- Today
- Total
목록딥러닝/파이썬 (7)
Hello Computer Vision
semi supervised learning을 공부하면은 labeled 데이터가 몇개가 있냐에 따라 성능이 달라진다. 따라서 dataset에서 labeled데이터 개수에 맞추어 분리하는 과정이 필요하다. cifar10 데이터셋을 사용하고 labeled 데이터가 4,000개 있을 때의 setting의 예시이다. num_labels = 4000 #labeled 데이터 개수 num_classes = 10 # class 개수 labels = cifar_dataset.targets # list로 되어있다 labels = np.array(labels) # array 로 변경해준다 label_per_class = num_labels // num_classes #클래스별 데이터 개수 labeled_idx = [] #i..
모델을 훈련 전에 복사할 필요성이 생겼는데 이번 기회에 copy, deepcopy를 비교해보려고 한다. 1. 다른 변수로 할당 우선 코딩 초보인 나에게 해당 변수 값을 다른 변수에 넘겨주면은 되지 않나 생각을 했다. a = [1,2,3] b = a a.append(4) print(f'a: {a}, 주소 : {id(a)}') print(f'b: {b}, 주소 : {id(b)}') a: [1, 2, 3, 4], 주소 : 2603786361344 b: [1, 2, 3, 4], 주소 : 2603786361344 이렇게 다른 변수를 사용하더라도 기존 변수에 대한 참조를 하기 때문에 값이 같이 변하는 것을 확인할 수 있고 메모리 주소도 같은 것을 확인할 수 있다. 이렇게 새로운 변수 생성하는 방법을 왜 사용하는지에..
github 오픈된 코드들을 보면은 logging이란 모듈이 상당히 많이 쓰이는 걸 알 수 있다. 이것에 대해 알아보자면 print대신 사용할 수 있으며 에러와 관련하여 다양한 기능들이 있다. 우선 기본적인 이해가 있다하고 내가 본 코드에서는 logger = logging.getLogger(__name__) 이렇게 선언하고 logging. ~~ 이렇게 선언하는게 아니라 logger로 계속 선언되었다. 이 부분은 설명보다는 결과로 비교하는게 제일 빠를 거 같다. ### test.py 파일에 적혀있는 코드 def run_module(): logger = logging.getLogger(__name__) logger.info('test파일임다') test.py 파일에는 위와같은 함수에 logger를 따로 선언..
이번에 교양으로 python 과목을 들었는데, 기초적인 자료구조에 대한 설명을 보았다. 물론 그 중에서도 잘 사용하지 않는 Dict, 튜플, set 등이 있었다. 그러다 갑자기쓰임새가 비슷할 거 같은 튜플과 리스트 중에 리스트가 더 편한데 왜 튜플을 사용하는지 궁금했다. 튜플의 가장 큰 불편한 점이라고 하면 리스트처럼 데이터를 추가할 수도, 변경할 수도 없다. 첫번째. 동적 배열 당연하지만 메모리 측면에서 튜플이 훨씬 유리하다고 한다. 그 중 리스트는 동적으로 크기를 늘릴 수 있는데 이러한 과정에서 메모리 크기는 더블링 된다. 따라서 배열에 추가로 데이터를 추가하는 동적 배열을 하게 될 경우 더 많은 메모리를 사용하게 된다. 두번째. 불변객체 튜플은 데이터를 변경할 수 없는 불변개체이며 리스트는 안의 데..
다른 사람들의 코드들을 살펴보던 중 getattr을 발견했다. 예전부터 몇번 본 거 같은데 코드짜는데 있어 알고 있으면 나쁠 거는 없다고 생각해서 기록해두려고 한다. 우선 파이썬 내장된 함수이며 따로 import 해서 불러올 필요가 없다. 다른 분들의 설명을 잘 이해를 못했었는데 예시를 통해서 보면 더 쉬울 거 같다. import torch.nn as nn import torch class MyModule(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(MyModule, self).__init__() self.fc = nn.Linear(input_dim, hidden_dim) self.bn = nn.BatchNorm1d(h..
가끔씩 코드를 보면은 copy.copy / copy.deepcopy가 나와서 이전부터 궁금했었는데 이번에 한번 알아보려고 한다. 복사와 비슷한 개념인 할당을 한번 해보자. a = [1,2,3,4] b = a print(b) [1, 2, 3, 4] 리스트 a를 정의해주고 이를 b에 할당한 모습이다. b[3] = 2 print(a) [1, 2, 3, 2] 그리고 b의 원소를 바꾸고 a를 출력해보면 똑같이 a의 원소도 바뀐 것을 확인할 수 있다. a[3] = 4 print(b) [1, 2, 3, 4] 이는 반대로 a의 원소를 바꾸어도 b의 원소가 바뀐 것을 확인할 수 있는데 할당을 한다면 두 객체가 같은 주소를 쓰기 때문이다. print(id(a)) print(id(b)) 2435534720448 243553..
이번에 object detection관련 공부를 하면서 custom dataset을 정의하는 과정에서 ->, :를 발견하여 공부해보려고 한다. 지금까지는 클래스를 정의하면서 따로 써본적이 한번도 없어서 일단 신기했다. ->(화살표)의 쓰임 함수 리턴 값의 주석역할을 한다. def myfunction(x) -> str: return x, type(x) print(myfunction(3)) (3, ) 다음과 같이 주석으로 str이 리턴될 것이라고 알려줘도 에러값이 뜨지않는 것을 확인할 수 있다. : (콜론)의 쓰임 화살표가 (->)가 리턴값에 대한 주석이었다면 콜론은 함수 매개변수에 대한 주석을 나타낸다 def myfunction(x : int) -> str: return x, type(x) print(my..