묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
섹션 다양한 Optimizer 정리하기 중 딥러닝으로 Regression 문제 적용해보기 (House Price Kaggle 문제) 강의에서 오류가 발생합니다.
섹션 다양한 Optimizer 정리하기 중 딥러닝으로 Regression 문제 적용해보기 (House Price Kaggle 문제) 강의에서 오류가 발생합니다.강의에 나오는 code 중 아래 부분을 실행하면 RuntimeError 가 발생합니다. 이 부분이 문제라고 나옵니다. --> loss = torch.sqrt(loss_function(y_minibatch_pred, y_minibatch))RuntimeError: The size of tensor a (1460) must match the size of tensor b (256) at non-singleton dimension 1 - 아 래 - for index in range(nb_epochs): indices = torch.randperm(X_train_tensor.size(0)) x_batch_list = torch.index_select(X_train_tensor, 0, index=indices) y_batch_list = torch.index_select(y_train_tensor, 0, index=indices) x_batch_list = x_batch_list.split(minibatch_size, 0) y_batch_list = y_batch_list.split(minibatch_size, 0) epoch_loss = list() for x_minibatch, y_minibatch in zip(x_batch_list, y_batch_list): y_minibatch_pred = model(x_minibatch) loss = torch.sqrt(loss_function(y_minibatch_pred, y_minibatch)) epoch_loss.append(loss) optimizer.zero_grad() loss.backward() potimizer.step() if index % 100 == 0: print(index, sum(epoch_loss) / len(epoch_loss))
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
마지막에 confusion matrix 작성할때
/usr/local/lib/python3.10/dist-packages/sklearn/utils/validation.py in check_consistent_length(*arrays) 405 uniques = np.unique(lengths) 406 if len(uniques) > 1: --> 407 raise ValueError( 408 "Found input variables with inconsistent numbers of samples: %r" 409 % [int(l) for l in lengths] ValueError: Found input variables with inconsistent numbers of samples: [2286, 238]수업 내용대로 했는데 이러한 에러가 나오네요.. 그대로 코드로 작성했는데요. 샘플 수가 안맞는건가요.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
아나콘다를 사용하지 않고 파이토치 사용하는 방법
회사에서는 라이선스 문제로 아나콘다를 설치하여 사용하지 못하고 있습니다. 그래서 이전 강의부터 계속 VS CODE에서 주피터노트북 확장자를 사용하여 강의를 듣고있습니다. 머신러닝 강의 때는 VS CODE에서 라이브러리가 문제 없이 설치되었는데, 파이토치의 경우 터미널에서 pip install torch torchvision torchaudio 한 후, 셀에서 import torch를 하면 계속 "[WindError 126] 지정된 모듈을 찾을 수 없습니다.~~~~" 에러가 뜹니다. 혹시 VS CODE에서 주피터노트북을 활용하여, PIP를 통해 파이토치 설치법을 알려주실수있는지 문의드립니다. 추가로 CUDA를 지원하지 않는 경우 cpu only로 설치해도 강의를 따라하기에 무리가 없는지 궁금합니다. - 강의 영상에 대한 질문이 있으시면, 주말/휴일 제외, 2~3일 내에 답변드립니다- 우선 질문전에 검색을 꼭 해보세요. 저희 목표는 스스로 이슈를 해결하는 역량을 기르는 것이고, 이는 즉 검색역량을 기르는 것입니다- 강의 영상 외적인 질문은 인프런 커뮤니티 (https://www.inflearn.com/community/questions) 도 활용해보세요~
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
안녕하세요, vit에 관심이 많은 사람입니다.
vit.ipynb 파일에서, 코드 !python vit.py --pretrained 1 --drop_rate 0.1 --weight_decay 2e-4 , 이것을 실행하였더니,Traceback (most recent call last): File "/content/gdrive/MyDrive/인프런/VisionTransformer/VisionTransformer/VisionTransformer/vit.py", line 38, in <module> image_patches, _ = iter(trainloader).next() AttributeError: '_SingleProcessDataLoaderIter' object has no attribute 'next' , 이런 에러가 발생하였는데, 어떻게 해결할 수 있을까요?
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
test data 의 loss 계산식 문의
10_ADVANCE-EXAMPLE-MILTI-LABEL-CLASSIFICATION 과 11_MILTI-LABEL-CLASSIFICATION-DROPOUT-BATCHNORMALIZATION 강의자료에서 맨 밑부분의 테스트셋 기반 Evaluation 에서 test_loss 를 계산할 때 전체 데이터인 10000으로 나누셨는데, 왜 그러신건지 궁금해서 질문드립니다.train 과 validation 의 loss 계산은 train_batches 와 val_batches 개수(for문 도는 횟수) 만큼만 나누셨는데 test loss 를 계산할 때는 minibatch 가 아닌 전체 데이터로 나누셔서 상대적으로 test data 의 loss 값이 작아보여서요.test_loss = 0correct = 0wrong_samples, wrong_preds, actual_preds = list(), list(), list()model.eval()with torch.no_grad(): for x_minibatch, y_minibatch in test_batches: y_test_pred = model(x_minibatch.view(x_minibatch.size(0), -1)) test_loss += loss_func(y_test_pred, y_minibatch) pred = torch.argmax(y_test_pred, dim=1) correct += pred.eq(y_minibatch).sum().item() wrong_idx = pred.ne(y_minibatch).nonzero()[:, 0].numpy().tolist() for index in wrong_idx: wrong_samples.append(x_minibatch[index]) wrong_preds.append(pred[index]) actual_preds.append(y_minibatch[index]) test_loss /= len(test_batches.dataset)
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
차원 출력 관련 문의
주피터 노트북 "06_1_DNN_PYTORCH" 자료에서 등록된 parameter 의 차원을 출력해보면 최초 출력되는 파라미터가 최초 등록한 nn.Linear(input_dim, 10) // (4, 10) 이면 (4, 10) 이 출력되어야 할 것 같은데 왜 (10, 4) 가 출력될까요? x = torch.ones(4) # input tensory = torch.zeros(3) # expected outputinput_dim = x.size(0)output_dim = y.size(0)model = nn.Sequential ( nn.Linear(input_dim, 10), nn.LeakyReLU(0.1), nn.Linear(10, 10), nn.LeakyReLU(0.1), nn.Linear(10, 10), nn.LeakyReLU(0.1), nn.Linear(10, output_dim) ) loss_function = nn.MSELoss()learning_rate = 0.01nb_epochs = 1000 optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)for epoch in range(nb_epochs + 1): y_pred = model(x) loss = loss_function(y_pred, y) optimizer.zero_grad() loss.backward() optimizer.step() print(loss)for param in model.parameters(): print (param) print(param.shape)
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
positional embedding 학습이 잘 안되는 문제
cifar10 말고 다른 이미지셋을 가지고 학습을 시켜보았는데, 시각화를 해 보니 수업에서 보여주셨던 것과는 다르게 positional embedding 학습이 잘 안되었습니다. 어디를 봐야할지 조언을 부탁드려도 될까요?
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
섹션 7-4 당뇨병
당뇨병 문제에서 직접 이상치 제거하는 게 손실 함수 줄이는데 도움이 될거라고 생각했는데 오히려 너무 커져버려서 왜 그런 건지 궁금합니다. 또 직접 제거하는 방식 말고 다르게 이상치 탐지하는 게 딥러닝에는 따로 있나요?
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
BackPropagation 질문입니다
오차 역전파가 작동하기 위해서는 결국 마지막 layer의 가중치 (w)값을 알아야 하는 거 같은데 마지막 layer의 가중치는 어떻게 구하나요?
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
RMSProp 관련 질문입니다.
안녕하세요! 섹션 9에서 AdaGrad, RMSProp 강의를 보다 궁금한 점이 생겨 질문드립니다. 제가 이해한 바로는, RMSProp은 학습이 잘 안되었음에도 t가 커질수록 $G_t$가 커지는 문제를 최대한 막는 방법이라고 이해했습니다. $G_t = \gamma G_{t-1} + (1 - \gamma)g_t^2$그런데 위 식대로라면 미분값($g_t$)이 커질때 오히려 $G_t$가 감소할수도 있을 것 같은데RMSProp은 AdaGrad와 달리 learning_rate가 커지는 쪽으로도 조절될 수 있도록 한 것인가요? 만약 맞다면 제가 알기로는 learning_rate는 t에 따라 감소하도록 하는 것이 일반적이라고 알고 있는데RMSProp에서 이렇게하면 학습에서 어떤 이점이 있는 것인지 궁금합니다.
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
파이토치와 비교하며 Numpy 라이브러리 사용법 익히기2 질문입니다.
약 11분 경에 행렬 곱셈을 설명하는 부분에서"앞 행렬의 행의 갯수와 뒷 행렬의 열의 갯수가 같아야 행렬간 곱셈이 가능하다"고 되어있는데 제가 알기로는 (n, k) @ (k, m) = (n, m) 이어서앞 행렬의 열의 갯수와 뒷 행렬의 행의 갯수가 같아야 행렬 곱셈이 가능하다고 알고 있습니다.제가 알고 있는게 맞을까요? 검색해봐도 설명이 이렇게 나와서 어느것이 맞는지 질문드립니다.
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
행렬 차원 수 질문
안녕하세요.'비전 트랜스포머-최신 모델' 강의 11:36 근처 슬라이드를 기준으로 질문드리겠습니다. (사실 그 이후부터 계속 지속적으로 차원 혼동이 있는 것 같아서, 하나를 기준삼아서 질문드리면 나머지가 저절로 해결될 것 같습니다.) p=(size of patch)로 정의를 하고 사진을 N개로 쪼갠다고 가정했을 때, 그것을 flatten시켜준 각각의 벡터들, (x_{p}^{i}, i=1,...,N)이라고 가정했을 때, 해당 벡터는 P^2*C 차원의 벡터들이 되는 거잖아요? 그렇다면, 그 N개의 벡터들을 concatenate하여 행렬 x_p를 구축했을 때, 그 차원은 (P^2*C) by N이 되어야 하는게 아닌가요? 이 이후부터 슬라이드에서는 가로와 세로가 뒤바뀌어 있는 것 같은데 뭐 실전에서는 transpose하면 되는 문제긴 하지만 나름대로 엄청나게 궁금해져서 질문을 드려봅니다. 설명을 해주신거나 그림을 그려주시는 것은 모두 x_{p}^{i}가 열벡터이고 concatenate를 하실 때 row-wise가 아니라 column-wise로 합치신 것 같아서 그렇게 생각이 들었습니다.
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
Self Attention 질문 있습니다.
1.q와 k를 내적 하는 이유가 궁금합니다. 이는 입력의 유사도 행렬을 얻기 위함으로 알고 있습니다. 그렇다면 q와 k가 아닌 q와 q의 트랜스포즈로 내적하면 안되는걸까요?음 ...업데이트 할때 q와 k가 비슷하게 학습되었다는 가정을 가지고 내적 한걸까요?2.그리고 Multi Head와 그냥 Self attention의 차이가 궁금합니다.별도의 파라미터로 학습되기때문에 하나일때보다 많은 관점이 녹아있다고 생각하면 될까요?3.다른 댓글에서 코드A@V가 리니어 라고 하셨는데요PPT에서는 SA(z)=Av와 [SA1(z)...]Umsa가 따로 있습니다. 코드에서는 A@V만 있는데 어떻게 연결지어서 봐야 할지 잘 모르겠습니다.
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
실제 캐글(Kaggle) 문제 풀고, 제출해보며, 성능 개선 기법 익히기5 강의에서 질문입니다
실제 캐글(Kaggle) 문제 풀고, 제출해보며, 성능 개선 기법 익히기5 강의에서 질문입니다.해당 강의 2:50 부분부터 Evaluation 코드에 관해 설명을 해주셨는데요,with torch.no_grad() 안쪽의 코드에서는 with torch.no_grad(): model.eval() ret = None for img, fileid in data_loader: img = img.to(device) pred = model(img) ids += list(fileid) # ex) [1, 2] + [3, 4] -> [1, 2, 3, 4] if ret is None: ret = pred.cpu().numpy() else: ret = np.vstack([ret, pred.cpu().numpy()]) return ret, ids pred.cpu().numpy()와 같이detach()를 따로 사용하지 않은 걸 볼 수 있었습니다. detach()의 사용에 관해서 찾아보니, with torch.no_grad() 블록은 역전파(gradient 계산)를 비활성화 하므로,pred는 gradient 계산과 관련이 없기에, detach()를 따로 호출하지 않고 numpy 배열로 변환할 수 있다 라는 내용을 찾을 수 있었습니다. 그 전에 수업 시간에 보여주신 코드에서는 model.eval() with torch.no_grad(): for x_minibatch in x_test_batch_list: y_minibatch_pred = model(x_minibatch) print(len(y_minibatch_pred), y_minibatch_pred.shape) y_pred_list.extend(y_minibatch_pred.squeeze().detach().tolist())이와 같이with torch.no_grad() 안에서도 detach()를 사용하신 코드들을 볼 수 있었는데요,Evaluation 단계에서 detach()의 사용이 필수적인 것인지 여쭙고 싶습니다!
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
실제 캐글 문제 풀고 제출해보며 성능 개선 기법 익히기8 강의에서 질문입니다
실제 캐글 문제 풀고 제출해보며 성능 개선 기법 익히기8 강의의 3:20 부분에서 궁금한 점이 있어 질문 올립니다. 해당 코드에서는 저장된 model_efficientnet-b7_without_scheduler_adam_1e5_epoch20.pth 모델을 load할 때, model_efficientb7 = deepcopy(model) PATH = '/content/drive/MyDrive/Colab Notebooks/Dataset/Dogs vs Cats/' model_efficientb7.load_state_dict(torch.load(PATH + 'model_efficientnet-b7_without_scheduler_adam_1e5_epoch20.pth'))다음과 같이 model의 뼈대를 다시 구성한 후, load_state_dict 메소드를 이용하여 가중치 값을 업데이트 하였습니다. 이때, model_efficientb7 = deepcopy(model) 와 같이 그냥 model 객체가 아닌, deepcopy(model)을 사용한 특별한 이유가 있는지 궁금합니다. deepcopy를 사용할 경우, 'model_efficientb7'과 'model' 객체는 서로 독립적인 객체로 유지된다는 점은 파악할 수 있었는데요,model_efficientb7에 적용되는 변화와는 별개로 model 객체 자체를 유지하려는 의도에서 사용한 것이라고 보면 되는지 여쭙고 싶습니다!
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
실제 캐글(Kaggle) 문제 풀고, 제출해보며, 성능 개선 기법 익히기2 강의에서 질문입니다
실제 캐글(Kaggle) 문제 풀고, 제출해보며, 성능 개선 기법 익히기2 강의 17:30 부분에서 질문이 있습니다. 이번 강의에서는 transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])와 같이 이미지 데이터에 Normalization을 적용하였는데요, from transformers import ViTFeatureExtractor feature_extractor = ViTFeatureExtractor.from_pretrained('google/vit-base-patch32-224-in21k') feature_extractor다음 코드와 같이 vit-base-patch32-224-in21k 모델에서 적용된 image_mean과 image_std를 확인해 보니,"image_mean": [ 0.5, 0.5, 0.5 ], "image_std": [ 0.5, 0.5, 0.5 ] 와 같이 결과가 나왔습니다. 그렇다면, 학습 데이터에 Normalization을 적용할 때에도 [ 0.5, 0.5, 0.5 ], [ 0.5, 0.5, 0.5 ] 값을 적용해야 하는 것이 아닌지 여쭙고 싶습니다. 감사합니다!
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
RNN과 LSTM 구현해보기2(MNIST 데이터셋) 강의에서 질문입니다
RNN과 LSTM 구현해보기2(MNIST 데이터셋) 강의의 15:04 부분에서 질문입니다. 강의에서는 다음과 같이 학습 과정에서 반복문을 작성했습니다. # |x_minibatch| = (128, 1, 28, 28) # |y_minibatch| = (128) for x_minibatch, y_minibatch in train_batches: x_minibatch = x_minibatch.reshape(-1, sequence_length, feature_size) y_minibatch_pred = model(x_minibatch) loss = loss_func(y_minibatch_pred, y_minibatch) optimizer.zero_grad() loss.backward() optimizer.step() train_losses.append(loss.item()) 이때, 아래와 같이 loss_func를 적용하는 부분에서 궁금한 점이 있는데요,loss = loss_func(y_minibatch_pred, y_minibatch)y_minibatch_pred 는 model에 x_minibatch 를 넣어서 값을 예측한 것으로, 그 shape이 (128, 10) 과 같이 2차원으로 나온다고 이해하였습니다.반면, y_miinibatch 는 (128) 과 같이 1차원으로 나오는 것을 확인했습니다. 이렇게 loss_func 안에 넣는 두 텐서의 다른 것으로 보이는데, y_minibatch의 shape을 변형해 줘야 하는 것은 아닌지 여쭙고 싶습니다..!
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
데이터로 딥러닝 적용해보기(당뇨병 환자 데이터) 강의에서 질문입니다
데이터로 딥러닝 적용해보기(당뇨병 환자 데이터) 강의에서 질문입니다.해당 강의 11:00 부분에서 입출력 차원의 수를 각각 9와 1로 정해주었습니다.이때, 모델에서의 계산 과정을 아래와 같이 이해하였습니다.우선, 전체 학습 데이터는 (442, 9) 형태이고, 가중치는 (9, 1) 형태이므로(442, 9) x (9, 1) -> (442, 1) 형태가 되고 여기에 (1) 의 형태를 가진 편향을 더해주면서 브로드캐스팅을 거쳐(442, 1) + (1) -> (442, 1) 형태가 되는 것으로 이해하였습니다. 제가 생각한 계산 과정이 맞는지 궁금합니다!감사합니다.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
예측하려는 y값이 여러 개일 경우에는 어떻게 하나요?
선생님 안녕하세요.강의 잘 듣고 있습니다.여기에선 y값이 'Global~' 하나 인데현업에서는 y값이 여러 개일 경우가 많은데, 그럴 때는 y_raw_data 컬럼을 어떻게 설정해주나요?
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
섹션2 코드질문
# 동일 shape 은 당연히 Tensor 간 연산 가능data1 = torch.torch.FloatTensor([ [1], [2], [3] ])data2 = torch.FloatTensor([1, 1, 1])data3 = data1 + data2 print (data1.shape, data2.shape, data3.shape)print (data3) 이 코드에서 data1은 torch.FloatTensor이 아닌torch.torch.FloatTensor를 사용하는 이유가 궁금합니다.출력했을때는 같은결과가 나오는데 말이죠..