묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
Multi-Head Attention 모델 구조에서 궁금한게 있습니다.
안녕하세요. 코드 공부하면서 궁금한 점이 생겨 질문남깁니다.앞선 이론 강의에서 이해한 바로는 MSA과정에서 Attention*value를 통해 [배치수, 헤드수, 패치수+1, Dh] 차원의 결과들이 나오고 Linear Projection을 통해 [배치수, 패치수+1, D] 차원의 결과가 얻어지는 것으로 이해했습니다.attention = torch.softmax(q @ k / self.scale, dim=-1) x = self.dropout(attention) @ v x = x.permute(0,2,1,3).reshape(batch_size, -1, self.latent_vec_dim)위와 같이 제공해주신 코드에는 이를 위한 Linear 과정이 따로 없는 것 같고 Attention*value 결과에 permute와 reshape를 해주었는데, 해당 과정이 이론에서 설명해주신 Linear 과정과 동일한 효과를 지니는 것일까요??
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
전처리 관련해서 질문이 있습니다
안녕하세요 강사님. 항상 좋은 강의 감사드립니다.데이터 전처리에 대해서 2가지 궁금점이 있어서 질문드립니다.RandomCrop 이나 Flip 같은 전처리는 데이터 증강을 위해서도 사용된다고 알고있는데 해당 전처리를 적용해주면 원본 데이터가 변경되는 것인지, 혹은 원본 데이터는 유지되고 전처리가 적용된 이미지가 추가되는 것인지 궁금합니다. 전자에 해당된다면 데이터 갯수의 증강을 목적으로 사용하기 위해선 원본 이미지데이터셋을 따로 저장해두고 전처리된 데이터셋과 합쳐줘야 될까요??RandomCrop에서 패딩을 넣어주는 이유가 정확하게 무엇인지 알고싶습니다.
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3] - 지금까지 익힌 이론과 미니배치까지 적용된 딥러닝 코드 구현해보기 에서 질
9분 20초쯤에 indices = torch.randperm(x.size(0)) print(indices) x_batch_list = torch.index_select(x, 0, index=indices) y_batch_list = torch.index_select(y, 0, index=indices) indices를 랜덤한 순서로 넣었다고 하셨는데그리고x_batch_list = torch.index_select(x, 0, index=indices) 이걸사용하는 이유가뭔가요?어차피 지금 랜덤하게 바뀐순서라면x_batch_list = x[indices] 이걸통해서 바로 넣어도 되는게 아닌가요? torch.index_select 이건 인덱스로 원하는 데이터만 선택적으로 추출하기에 적합하다고 알고있습니다. 이번에 굳이 x_batch_list = x[indices] 이게아닌 x_batch_list = torch.index_select(x, 0, index=indices) 이걸 사용한 이유를 알고 싶습니다.제가 아는것이 전부가 아닌 또다른게 있는가해서요
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]에 파이토치(PyTorch) 텐서 연산 관련 수학과 구현 정리 (이론+실습) 파이토치(PyTorch) 텐서 연산 관련 수학 정리 강의 질
5분 50초쯤에data1 = torch.FloatTensor([1,2]) # 1,2 원소를 가진 1D 텐서 선언이걸 가르키면서 정확히 말하면 2차원 벡터라고 말씀하셨는데 그럼 data1 = torch.FloatTensor([1,2,3,4])print(data1)tensor([1., 2. ,3., 4.])이렇게 된다면 4차원이 되는건가요? 다른 블로그나 구글링을 해보면2. 벡터(1D Tensor)숫자들의 배열을 벡터라고 하며 1차원 텐서라고 한다.벡터의 축의 개수는 1개이다.vector = np.array([1, 2, 3, 4, 5]) print(vector) print(vector.ndim) print(vector.shape)[1 2 3 4 5] 1 (5,)이렇게 말하고 있습니다. 또 강사님의 02_tensor.md 파일을보면벡터(1D 텐서)벡터(1D 텐서): 숫자 여러 개가 특정 순서대로 모여 있는것을 의미함 (배열이라고 이해하면됨)하나의 벡터가 이루는 데이터의 갯수가 n개이면 n-차원 벡터라고함벡터는 열 벡터, 행 벡터 둘다 가리키지만, 열 벡터로 표현하는것이 일반적임이라고 하는데 갯수가 n개이면 n-차원 벡터 이말과 저위의 다른 누군가의 블로그(구글링)의 말에 혼동이 좀 생기는것 같습니다. 아마 강사님께서 차원의 대한 얘기가 혼동될 수 있다고 수차례 말씀하셨는데 이부분인가 싶기도합니다.아니면 제가 잘못 생각하고 있는부분이 있는지 알려주시면 감사하겠습니다
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
답변에 대한 추가질문이 있습니다.
답변 감사드립니다!강의를 통해 Head 수에 따라 다양한 영역에 대한 Attention 이 가능하다고 이해했습니다. 이에 따른 추가적인 궁금한 부분이 있습니다. (아래 질문은 배치 사이즈를 배제하고 질문드립니다.)Umsa를 통한 Linear Projection 이전의 shape는 (N x Dh x k) 이고, 이후의 shape는 (N x D)로 k가 사라져서 다양한 영역을 Attention 하고자 하는 의도가 사라지는 것 아닌지, 그렇다면 Umsa의 역할이 무엇인지 헷갈렸습니다. Umsa를 통한 Linear Projection을 진행한 후에도 다양한 영역을 Attention하고자 하는 Head의 특성이 반영되기에 상관이 없는건지 궁금합니다. Umsa도 무작위로 주어지고 학습을 통해 최적화되는 것이 맞을까요?
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
헷갈리는게 몇개 있습니다ㅠㅠ
안녕하세요 강사님.Transformer 에 대해 처음 공부해보니 헷갈리는 부분들이 있어서 질문남깁니다.1) k 개의 Multi-Head를 만든 후에 Linear를 해주는 이유가 따로 있는지 궁금합니다. 단순히 Residual Connection을 위해 차원을 맞춰주기 위해 하는 것인가요??2) Head의 개수(k)는 CNN에서 필터 개수처럼 사용자가 정해주는 파라미터인가요??3) 클래스 토큰까지 Positional Embedding을 더해줘야 하는 이유가 따로 있을까요??좋은 강의 덕분에 따라가긴 하는데 한 번에 이해하려하니 과부하가 와서 헷갈리는게 생기네요ㅠㅠ코드 분석 파트 들어가면 조금 더 이해가 될 것 같은데 우선적으로 질문남겨봅니다.
-
해결됨최신 딥러닝 기술 Vision Transformer 개념부터 Pytorch 구현까지
Positional Encoding, KQV 질문입니다!
안녕하세요!제가 여쭙고 싶은 질문이 2가지 있습니다. Positional Encoding은 이미지를 패치로 바꿔주었을 때 순서 유지를 목적으로 순서를 기억하는 용도로 이해를 하였는데, 코드에서 랜덤한 값으로 지정하여 이를 단순 더해줍니다. 단순 랜덤한 값을 더해주는 과정인데, 이게 왜 위치를 기억하는 positional encoding이 되는지 이해가 가지 않습니다.Key Query Value 관련해서 셋 모두 Linear Projection을 진행하는데, 같은 representation 하나에 대해서 세개 모두 단순 선형변환을 진행하면 같은 벡터가 나오지 않나 하는 의문이 들었습니다. 만약 그렇다면, 왜 같은 과정을 K Q V 세번이나 진행하는지, 만약 다르다면 nn.Linear를 진행할 경우 벡터 방향이 비슷하게 다른 벡터로 벡터공간에 주입이 되는지 궁금합니다.강의 너무너무 유익했습니다. 감사합니다!
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
early stopping관련
안녕하세요, tensorflow로 다른 강의들을 듣다가 torch를 공부하기 시작한지 얼마안돼서 여쭤보는 질문입니다.tensorflow에서는 callback함수로 간단히 earlystopping이나 checkpoint등을 가져와 쓸 수 있는 모듈이 있는걸로 알고있습니다. 혹시 torch에서는 그런 모듈이 따로 없는건가요?
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
nn.Parameter
class로 모델 만드는 설명 해주실 때, linear layer 예제 알려주실 때, 파라미터로 등록하려면 nn.Parameter()로 감싸주라고 하셨는데요, 이후의 코드들을 보면 따로 감싸주는 모습이 안보여서요.파라미터로 등록할 때 명시적으로 필요 없는 경우가 있는 건지요? 감사합니다.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
9:45 쯤에 y_pred_list.extend 질문입니다.
list.append 와 list.extend의 차이는 append는 y_test_pred자체를 리스트에 추가를 하는 것이고, extend는 리스트의 맨 끝쪽에 y_test_pred 원소들을 하나씩 다 넣는것으로 이해를 했는데, 여기서는 append나 extend 둘 다 써도 괜찮은 것인가요? 제가 이해한 바로는 그렇습니다!
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
8분 33초 df_train.corr()['SalePrice'] 부분 질문입니다.
안녕하세요 항상 좋은 강의 해주셔서 감사합니다.df_train.corr()['SalePrice'] 를 실행했더니,ValueError: could not convert string to float: 'RL'이런 벨류 에러가 뜹니다.따라서 인터넷에 찾아보았더니, 'RL'과 같은 문자열을 실수(float)으로 변환할 수 없다고 하며, 이러한 문자열이 존재하는 열은 데이터 타입이 숫자형이 아닌 문자형(object)일 가능성이 높다고 하는데, 위에서 해당 feature를 봤을 떄는 실수형이던데 왜 이런 오류가 발생하는지 아실까요?
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
MNIST 데이터 DNN 학습시키는 반복문 안에 minibatch 관련 질문
# 질문 1. 아래와 같이 model 안에 x_minibatch, y_minibatch를 넣고 학습을 시키는 과정인데 결국 train_batches의 차원은 (375,128,1,28,28) # 48000/128=375 x_minibatch 의 차원은 (128,1,28,28) 여기서 model의 input의 차원은 (128,784) 가 맞을까요? 결국 한번 model 넣을 때마다 128개의 data가 학습되는 건가요? DNNModel에는 input 차원이 (784,)인 1개의 데이터가 들어가서 output으로 (10,) 데이터를 출력한다고 알고있어서 조금 개념이 충돌하는 것 같습니다. # 질문 2. train_batches의 type이 torch.utils.data 이라 shape을 알기 어려워 행렬 구조가 눈에 안들어오는데 따로 보는 방법이 있을까요? model.train() # prep model for training for x_minibatch, y_minibatch in train_batches: y_minibatch_pred = model(x_minibatch.view(x_minibatch.size(0), -1)) loss = loss_func(y_minibatch_pred, y_minibatch) optimizer.zero_grad() loss.backward() optimizer.step() train_loss += loss.item() train_loss = train_loss / len(train_batches) train_losses.append(train_loss)
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
데이터 범위 질문
- 강의 영상에 대한 질문이 있으시면, 주말/휴일 제외, 2~3일 내에 답변드립니다- 우선 질문전에 검색을 꼭 해보세요. 저희 목표는 스스로 이슈를 해결하는 역량을 기르는 것이고, 이는 즉 검색역량을 기르는 것입니다- 강의 영상 외적인 질문은 인프런 커뮤니티 (https://www.inflearn.com/community/questions) 도 활용해보세요~강사님 고생많으십니다. 강의 잘 듣고 있습니다.한가지 의문점이 생겨서 질문드립니다. 당뇨병 환자 데이터 강의에서는 data의 범위를 설정하실때 제일 마지막 부분이 target이라서 빼신것이라고 이해했습니다.dataframe으로 출력해서 descr과 함께 확인했는데. target은 따로 되어있는것이 아닌지... 제가 잘못 보고 있는 것인지 궁금합니다.만약 제 말이 맞다고 가정하였을때 코드를 실행해보면 target의 사이즈는 422로 나옵니다 차원값이 없는데 이부분을 unsqueeze를 해서 차원을 추가해주면 될까요저렇게 했을때 loss값이 3000이 넘습니다.optimizer를 adam이나 learning rate를 변경해줘봐도 의미는 없는것 같습니다. 단층이라서 그런것 같은데.위에 데이터의 범위와 차원 추가하는 방법이 맞는 것인지 궁금합니다.
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
GPU 학습 파일 없음
GPU로 실행하려면 13_LSTM_STOCK_ADVANCE_GPU.ipynb 파일로 실행하라고 적혀 있는데, 강의 자료 다운로드 시 해당 파일이 없는 것 같아요
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
09.simple_actual_example_multi_label_calssification에서 loss함수에 대해서 질문이 있습니다.
epoch를 돌리는 코드에서 loss = loss_func( y_minibatch, y_minibatch_pred) 했는데 다음과 같은 오류가 났습니다." 0D or 1D target tensor expected, multi-target not supported "그래서 쥬피터의 원본대로 pred를 먼저하니까 정답이 나오더라구요. 구글링을 해본 결과 nn.CrossEntropyLoss()(pred, target) 계산된다고합니다.질문1. 순서를 지켜야하는 이유가 있나요?질문2. MSE와 BCE도 (pred, target) 순서를 지켜야하나요? 구글링을 해봤는데 정확하게 나오지는 않아서 여쭤보게 되었습니다.감사합니다.
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
from_pretrained 에 관한 질문입니다
강의 4:53 에 나오는 from_pretrained 함수에 관한 질문입니다.공식 문서를 아무리 찾아봐도, 더 미궁 속으로 빠지는 듯한 느낌만 들어서(...) 질문 올립니다. from_pretrained 메소드는 huggingface에서 제공하는 그 어떠한 클래스에도 공통적으로 적용이 가능한 것인지 궁금합니다.공식 문서에서 from_pretrained를 검색해본 결과, 각 검색 페이지마다 from_pretrained의 파라미터가 다르게 나오고, 그에 대한 설명조차도 찾을 수가 없었습니다...예를 들어, FeatureExtractionMixin 의 from_pretrained 메소드의 파라미터는 9개인 반면, AutoTokenizer의 from_pretrained 메소드의 파라미터는 13개 라고 서술되어 있는 경우를 볼 수 있었습니다.또한, 강의에서 사용하였던feature_extractor = ViTFeatureExtractor.from_pretrained("google/vit-base-patch16-224-in21k") feature_extractor이 코드와,model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224-in21k', num_labels=10, # 10개의 클래스로 분류를 해야 함 id2label=id2label, label2id=label2id)이 코드에서도 역시 from_pretrained 메소드가 사용되었는데,공식 문서에서 ViTFeatureExtractor와 ViTForImageClassification을 아무리 찾아보아도 from_pretrained 메소드에 관한 설명은 볼 수가 없었으며, 각각의 경우에 적용되는 파라미터에 관한 내용 역시 찾아볼 수 없었습니다.이런 경우, 다른 코드에 from_pretrained 메소드를 적용할 때에는 해당되는 내용을 어떻게 찾아야 하는 것인지 궁금합니다.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
out = out[:, -1] 코드에 관한 질문입니다
강의 8:30 부분에서 나오는out = out[:, -1] 코드에 관한 질문입니다. 우선, 다음과 같이 예시를 작성해 보았습니다이렇게 test_data를 만들고, 여기에 test_data[:, -1] 을 적용해 보았는데요,shape이 (3, 2, 4) 에서 (3, 4) 로 바뀌는 것은 확인하였지만, 이 코드가 '왜 사용되었는지' 에 관한 궁금증이 생겼습니다. 단지 shape을 맞춰주기 위해서 전체 데이터 중 일부를 slicing 하는 것이라면, view 메소드를 사용해서 shape을 맞춰주는 방법도 있을텐데요,전체 데이터 중에서 일부를 slicing 하는 방식으로 이렇게 코드를 작성한 이유가 무엇인지 궁금합니다!
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
batch normalization과 standard scaler에 관한 질문입니다
안녕하세요, batch normalization과 standard scaler의 사용에 관해 질문드립니다! 우선, batch normalization은 학습 과정에서 각 배치 단위 별로 데이터가 다양한 분포를 가지더라도 각 배치별로 평균과 분산을 이용해 정규화하는 것을 뜻하고, 결국 평균 0, 분산 1로 데이터의 분포를 조정하는 과정으로 이해를 하였습니다. 또한, 이전에 학습하였던 standard scaler 역시 전처리 과정에서 평균 0, 분산 1로 데이터를 조정하는 역할을 한다고 이해하였는데요 batch normalization과 standard scaler의 작동 방식 자체가 조금 유사하게 느껴지는데, 이 둘은 각각 전처리 과정과 학습 과정에서 따로 사용되는 것으로 보면 되는 것인가요??
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
딥러닝 코드에 Batch Normalization 적용해보기 질문입니다
해당 강의 8:18 에서self.layers를 선언할 때, Layer(input_dim, 256. batch_norm, dropout),Layer(256, 256, batch_norm, dropout),Layer(256, 128, batch_norm, dropout),으로 계층들을 선언을 하는 과정에서,Layer들을 선언 했을 때, Layer 클래스 안에 있는 init 매소드만 실행이 되서 생성된 Layer 객체들 안에 self.layer에 값들이 할당이 된것인지.Layer 객체들에서 forward 매소드에서 필요한 인자 (x)를 할당받은 부분이 없기 때문에 DNNModel 클래스의 self.layers를 할당하는 과정에서는 Layer 객체들의 forward 매소드가 실행을 하지 않은 것인지 2가지 질문을 드립니다.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
딥러닝으로 Regression 문제 적용해보기 (House Price Kaggle 문제) 질문입니다
해당 강의 11:25 에서standardScaler()를 X_train과 X_test에 적용을 시키는데 결과값인 y_train에는 결국 SalePrice를 구하기위해서 standardScaler()를 적용시키지 않는다고 이해를 했습니다. 여기서 질문이, 그럼 standardScaler()는 주로 input 데이터들(ex - X_train과 X_test 등) 에만 적용을 시키고 결과값(y_train 등)에는 적용을 잘 안시키나요?