묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
Validation Dataset의 Shuffle 관련 질문
안녕하세요. 강의 통해 항상 도움 받고 있습니다.다름이 아니라 현재 진행중인 프로젝트에서 모델을 학습하며 Validation 데이터셋에 대한 성능을 확인하는데, Validation 데이터셋의 shuffle을 했을 때와 안했을 때 성능에 유의미한 차이가 발생합니다.무엇이 이유이며 Validation 및 Test Dataset은 항상 Shuffle=False로 설정해주어야 하는지 궁금합니다.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
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) 순서를 지켜야하나요? 구글링을 해봤는데 정확하게 나오지는 않아서 여쭤보게 되었습니다.감사합니다.
-
미해결프로그래머를 위한 강화학습(저자 직강)
PPO에서 min()을 사용하는 이유가 궁금합니다
설명해주신대로면,min()을 사용하지 않아도 이미 clip()을 통해서 r()이 상항과 하한을 넘기면 a 혹은 b로 고정되고, 그 범위 안에 들어가면 r()이 그대로 나오는 것으로 생각됩니다. min()이 여기서 어떠한 역할을 하는지 궁금합니다.=> 범위 안에 있을때 r(original) 과 r(clipped)가 달라지는 경우가 있나요?
-
미해결실전 인공지능으로 이어지는 딥러닝 개념 잡기
과적합 판단 방법에 대해 질문 드립니다.
안녕하세요, 강연자님의 자세하고 좋은 강의 잘 듣고 있습니다! 과적합 판단 방법에 대해 몇 가지 질문 드리려고 합니다.강의 복습 및 응용을 위해 5개의 Dense Layer로 구성된 DNN 실험을 진행해봤습니다. 데이터셋은 public하게 공개되어 있는 데이터를 사용했습니다.epoch 변화에 따른 정확도, 손실 함수 그래프를 그려봤는데, 첨부한 그래프들이 과적합에 해당하는지 잘 모르겠습니다. 그래서 제 그래프에서 과적합을 판단하는 기준이 무엇이 될 수 있는지 궁금합니다.저는 검증 loss가 학습 loss 보다 높을 때 과적합이라고 알고 있는데, 제가 복습을 위해서 진행해본 실험에서는 일단 그래프가 안 만나고 항상 검증 loss가 학습 loss보다 낮은데 이건 과적합이 아닌건지 궁금합니다.loss 그래프에서 학습 loss와 검증 loss가 교차되면서 검증 loss가 더 높아지는 경우에 학습을 조기 종료하는 것이 좋다고 생각하는데, 저희가 진행해본 실험에서는 그래프가 평행하게 나타납니다. 이런 경우에는 학습 및 검증 loss가 교차되지 않기 때문에 과적합이 아니라고 판단해도 되는지, 실험을 조기 종료하지 않아도 되는지 궁금합니다.아래의 그래프에서 validation loss와 validation accuracy가 V자로 나오는 구간이 있습니다. 이런 경우에는 어떤 이유 때문에 나타나는 현상인지 궁금합니다.과적합 판단 방법에는 말씀해주신 교차 검증을 이용한 판단, loss-epoch 그래프에서 validation loss값이 높아지는 부분으로 판단하는 것 외에 ‘편향-분산 트레이드오프 그래프’를 사용하는 방법도 있다고 알고 있습니다(가로축이 훈련세트크기입니다). 혹시 이 그래프는 강의에서 말씀해주신 그래프와 다른 것인지, 그리고 혹시 편향-분산 트레이드오프 그래프를 그리는 코드를 추천해주실 수 있을까요?강의에서는 교차 검증으로 과적합을 판단할 수 있다고 하셨는데, 이를 실제로 어떻게 하는지 궁금합니다. 교차 검증의 결과로 나온 avg, accuracy 등의 값이 과적합을 판단하는데 사용이 되는건가요!? 관련해서 교차 검증을 사용해서 과적합을 판단하는 법에 대한 보충 설명 해주시면 감사드리겠습니다! 좋은 하루 보내시길 바랍니다.감사합니다!
-
미해결[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
학습자료 다운로드 ipynb파일이 없음
코드파일을 다운받았는데 ipynb파일이 없습니다. 폴더는 있고 강의하시는 자료가 없습니다.
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
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) 부트캠프 [데이터과학 Part3]
out = out[:, -1] 코드에 관한 질문입니다
강의 8:30 부분에서 나오는out = out[:, -1] 코드에 관한 질문입니다. 우선, 다음과 같이 예시를 작성해 보았습니다이렇게 test_data를 만들고, 여기에 test_data[:, -1] 을 적용해 보았는데요,shape이 (3, 2, 4) 에서 (3, 4) 로 바뀌는 것은 확인하였지만, 이 코드가 '왜 사용되었는지' 에 관한 궁금증이 생겼습니다. 단지 shape을 맞춰주기 위해서 전체 데이터 중 일부를 slicing 하는 것이라면, view 메소드를 사용해서 shape을 맞춰주는 방법도 있을텐데요,전체 데이터 중에서 일부를 slicing 하는 방식으로 이렇게 코드를 작성한 이유가 무엇인지 궁금합니다!
-
미해결[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
register_forward_hook을 활용한 피쳐맵 추출에서 문제가 발생합니다ㅠㅠ
안녕하세요. 현재 코랩환경에서 파이토치 제공 Mask-RCNN을 활용하고 있습니다. 강의에서 알려주신 Hook를 활용하여 중간 레이어의 피쳐맵을 추출하고자 진행하던 과정에서 문제가 발생하여 질문드립니다ㅠㅠ모델은 제가 가진 데이터셋에 맞춰 출력층을 바꾸어준 후에 학습을 완료한 상태입니다. 이후 for문을 통해 모델에 여러 입력 이미지들을 넣어주어 이미지별 중간 레이어의 피쳐맵을 얻으려고 하였으나, 출력결과 하나의 이미지에 대한 피쳐맵만 반복적으로 출력되는 문제가 발생합니다...모델 학습 및 가중치 로드 후 코드는 다음과 같습니다.Hook 함수def get_activation(name): def hook(models, input, output): activation[name] = output return hook입력 이미지별 피쳐맵 저장activation = {} device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") models.to(device) for i in range(1, 5): test_img = Image.open("입력 이미지 루프").convert('RGB') test_img = test_img.resize((800, 800)) test_img = tr.functional.to_tensor(test_img) test_img = test_img.reshape(1, 3, 800, 800) with torch.no_grad(): models.eval() models.backbone.fpn.extra_blocks.register_forward_hook(get_activation("fm{}".format(i))) test_img = test_img.to(device) models(test_img)출력 결과activation["fm1"] 부터 ["fm4"] 까지 동일한 값이 들어가 있음아무리 찾아보고 여러 시도를 해보아도 해결이 되지않아 답답하네요ㅠㅠ추가로 위의 코드를 한번 돌리면 런타임을 다시 시작하지 않는 이상 이후에 코드를 수정하여 hook 함수부터 다시 돌려도 적용이 되지 않는 문제도 발생합니다...
-
해결됨처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
batch normalization과 standard scaler에 관한 질문입니다
안녕하세요, batch normalization과 standard scaler의 사용에 관해 질문드립니다! 우선, batch normalization은 학습 과정에서 각 배치 단위 별로 데이터가 다양한 분포를 가지더라도 각 배치별로 평균과 분산을 이용해 정규화하는 것을 뜻하고, 결국 평균 0, 분산 1로 데이터의 분포를 조정하는 과정으로 이해를 하였습니다. 또한, 이전에 학습하였던 standard scaler 역시 전처리 과정에서 평균 0, 분산 1로 데이터를 조정하는 역할을 한다고 이해하였는데요 batch normalization과 standard scaler의 작동 방식 자체가 조금 유사하게 느껴지는데, 이 둘은 각각 전처리 과정과 학습 과정에서 따로 사용되는 것으로 보면 되는 것인가요??
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
딥러닝 코드에 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) 부트캠프 [데이터과학 Part3]
딥러닝으로 Regression 문제 적용해보기 (House Price Kaggle 문제) 질문입니다
해당 강의 11:25 에서standardScaler()를 X_train과 X_test에 적용을 시키는데 결과값인 y_train에는 결국 SalePrice를 구하기위해서 standardScaler()를 적용시키지 않는다고 이해를 했습니다. 여기서 질문이, 그럼 standardScaler()는 주로 input 데이터들(ex - X_train과 X_test 등) 에만 적용을 시키고 결과값(y_train 등)에는 적용을 잘 안시키나요?
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
Binary Classfication 딥러닝 적용해보기 질문입니다
Binary Classfication 딥러닝 적용해보기 강의 19:13초에서, y_pred_list.extend(y_test_pred.squeeze().detach().tolist())를 실행한뒤, y_pred_list = torch.tensor(y_pred_list).unsqueeze(1)을 실행하는데,y_pred_list의 size() 를 y_test_tensor의 size()와 맞추는거면predlist.extend(y_test_pred.detach().tolist())를 실행한뒤, y_pred_list = torch.tensor(y_pred_list)) 을 실행해도 같은 건가요?
-
해결됨[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
Augmentation 질문
안녕하세요. 데이터 증강 부분에 대해서 궁금점이 있어서 질문드립니다.가지고 있는 데이터가 1000개 라고 가정했을 때, tr.Compose를 적용시키면 '기존 이미지 1000개 + 증강된 추가 이미지 개수' 가 되는건가요??제가 간단하게 해봤을 때는 transform 했을 때 이미지 개수 증가가 아니라 단순 이미지 변환까지만 이루어지는 것 같은데, 제가 잘못된 부분이 있는건가 좀 헷갈려서 질문 드립니다.만약 단순 이미지 변환만 이루어지는 것이라면 이미지 개수 증가를 위해서 추가적인 작업을 진행해주어야 하는지도 궁금하네요.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
torch.armax에 관한 질문입니다
Multi-Class Classification 딥러닝 적용해보기 강의 8:40 부분에서 사용된torch.argmax(x, dim=차원) 에 관한 질문입니다. torch.argmax 함수의 자세한 실행 방식이 궁금해서 pytorch 공식 문서 등을 찾아보았는데요,'dim' 파라미터에 관한 설명이 다음과 같이 나와 있었습니다.dim (int) – the dimension to reduce. If None, the argmax of the flattened input is returned. 여기서 "the dimension to reduce" 라는 표현이 정확히 무엇을 의미하는지 궁금합니다.
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
output_dim 에 관한 질문입니다
Multi-Class Classification 딥러닝 적용해보기 강의 5:26 부분에서0, 1, 2 Multi-Label 에 대한 확률값을 구해야 하므로, output_dim은 3이 되어야 한다고 설명해 주셨습니다반면, Binary Classification 강의에서는 0, 1 Label 에 대한 확률값을 구하면서 output_dim을 1로 설정을 하였는데요,Binary Classification 예제는확률값이 0에 가까우면 phishing, 1에 가까우면 legitimate로 분류되므로 그냥 확률값만을 담고 있는 1차원의 열벡터만 필요한 것이고,Multi-Class Classification 예제는3가지 feature에 대한 확률값이 각각 담겨야 하므로 output_dim을 3으로 설정한 것으로 이해하면 되나요??
-
미해결[PyTorch] 쉽고 빠르게 배우는 GAN
DCGAN 실습에 있는 celba 이미지 다운로드 권한 요청
안녕하세요..강의를 듣고 있는 학생입니다.DCGAN 의 강의를 실습을 하고자 하는데 구글 drive 에 대한 접근 권한이 필요하여 문의 드립니다.접근 권한 어떻게 신청하면 될지 문의 드립니다.
-
미해결[Pytorch] 파이토치를 활용한 딥러닝 모델 구축
nn.CrossEntropyLoss() method 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.좋은 강의 항상 감사드립니다.nn.CrossEntropyLoss() 는 nn.LogSoftmax 와 nn.NLLLoss 연산의 조합이라고 말씀해 주셨고, cross-entropy는 아래와 같은 식인 것으로 알고 있습니다.위 식에서 log는 한번만 취해지는 것으로 보입니다. 그런데 CrossEntropyLoss가 LogSoftmax 와 NLLLoss 연산의 조합이라면 Log 함수가 두번 사용 되는 것 같아서 이해가 잘 되지 않습니다.설명을 해주시면 감사드리겠습니다 :-)
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
Prepare dataset 부분에서 코드 오류가 납니다 ㅠㅠ
첨부해주신 코드를 복사 붙여넣기 했는데, 오류가 나네요.. ㅠㅠ오류명은 : ---> 21 class CustomDataset(Dataset): 22 def init(self, file_list, transform=None): 23 self.file_list = file_listTypeError: str() argument 'encoding' must be str, not tupledataset_train = CustomDataset(train_list, transform=transforms_for_train) dataset_valid = CustomDataset(val_list, transform=transforms_for_val_test) dataset_test = CustomDataset(test_list, transform=transforms_for_val_test)CustomDataset 클래스를 통해, train, valid, test를 만들어주는 과정에서, str() arguments를 받아야 한다는 것 같은데.. 왜 오류가 나는지 잘 모르겠습니다.from torchvision import transforms input_size = 224 transforms_for_train = transforms.Compose([ transforms.RandomResizedCrop(input_size, scale=(0.5, 1.0)), transforms.RandomHorizontalFlip(), transforms.RandomVerticalFlip(), transforms.RandomRotation(10), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) transforms_for_val_test = transforms.Compose([ transforms.Resize(input_size), transforms.CenterCrop(input_size), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) #class Dataset class CustomDataset(Dataset): def __init__(self, file_list, transform=None): self.file_list = file_list self.transform = transform def __len__(self): return len(self.file_list) def __getitem__(self, idx): img_path = self.file_list[idx] if img_path.split('/')[-1][-3:] == 'jpg': img = Image.open(img_path) if self.transform is not None: img_transform = self.transform(img) label = img_path.split('/')[-1].split('.')[0] if label == 'dog': label = 1 elif label == 'cat': label = 0 return img_transform, label dataset_train = CustomDataset(train_list, transform=transforms_for_train) dataset_valid = CustomDataset(val_list, transform=transforms_for_val_test) dataset_test = CustomDataset(test_list, transform=transforms_for_val_test) # from torch.utils.data import DataLoader # 데이터 로더 클래스 # # train_batches = DataLoader(dataset=dataset_train, batch_size=8, shuffle=True) # val_batches = DataLoader(dataset=dataset_valid, batch_size=8, shuffle=False) # test_batches = DataLoader(dataset=dataset_test, batch_size=8, shuffle=False)강의 내용과 같이 len(train_list), len(val_list)가 잘 출력이 됨을 볼 수 있고, Reference 항목에서 특정 img의 사이즈를 출력해볼 떄도, (500, 374) 라고 잘 출력됨을 알 수 있었습니다.train할 데이터와 test 데이터는 강의 중에 배운 os 명령어 및 with zip 명령어를 사용해서<오류 화면 입니다.>전체 작성한 코드 첨부드립니다.import zipfile Dataset = 'dogs-vs-cats-redux-kernels-edition' with zipfile.ZipFile('../BecomeProfessional/' + Dataset + ".zip", "r") as z: z.extractall(".")import pandas as pd import numpy as np import warnings warnings.filterwarnings('ignore') from PIL import Image import torch import torch.nn as nn from torch.utils.data import DataLoader, Subset from torchvision import datasets, transforms from sklearn.model_selection import train_test_split from copy import deepcopy import matplotlib.pyplot as plt import os, shutilimport random import os #device 설정 device = 'cuda' if torch.cuda.is_available() else 'cpu' print(device) seed = 42 # seed값 설정 random.seed(seed) # 파이썬 난수 생성기 os.environ['PYTHONHASHSEED'] = str(seed) # 해시 시크릿값 고정 np.random.seed(seed) # 넘파이 난수 생성기 torch.manual_seed(seed) # 파이토치 CPU 난수 생성기 torch.backends.cudnn.deterministic = True # 확정적 연산 사용 설정 torch.backends.cudnn.benchmark = False # 벤치마크 기능 사용 해제 torch.backends.cudnn.enabled = False # cudnn 기능 사용 해제 if device == 'cuda': torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed)original_data_path = './Dog_Cat/' os.makedirs('dogsvscats', exist_ok=True) import zipfile with zipfile.ZipFile(os.path.join(original_data_path, 'train.zip')) as train_zip: train_zip.extractall('./Dog_Cat/dogsvscats') with zipfile.ZipFile(os.path.join(original_data_path, 'test.zip')) as test_zip: test_zip.extractall('./Dog_Cat/dogsvscats')import glob print(glob.glob('./Dog_Cat/dogsvscats/train/*'))출력: ./Dog_Cat/dogsvscats/train\\cat.11346.jpg', './Dog_Cat/dogsvscats/train\\cat.11347.jpg', './Dog_Cat/dogsvscats/train\\cat.11348.jpg', './Dog_Cat/dogsvscats/train\\cat.11349.jpg', ' .... (엄청 많이 출력됩니다)train_dir = './Dog_Cat/dogsvscats/train' test_dir = './Dog_Cat/dogsvscats/test' all_train_files = glob.glob(os.path.join(train_dir, '*.jpg')) test_list = glob.glob(os.path.join(test_dir, '*.jpg')) train_labels = [path.split('/')[-1].split('.')[0] for path in all_train_files] train_list, val_list = train_test_split(all_train_files, test_size=0.1, stratify=train_labels, random_state=seed) print(len(train_list), len(val_list))출력: 22500 2500train_list[0]출력: './Dog_Cat/dogsvscats/train\\cat.4814.jpg'img = Image.open('./Dog_Cat/dogsvscats/train/cat.4814.jpg') img.size출력: (500, 374)import IPython image1 = IPython.display.Image(filename='./Dog_Cat/dogsvscats/train/cat.4814.jpg') display(image1)from torchvision import transforms input_size = 224 transforms_for_train = transforms.Compose([ transforms.RandomResizedCrop(input_size, scale=(0.5, 1.0)), transforms.RandomHorizontalFlip(), transforms.RandomVerticalFlip(), transforms.RandomRotation(10), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) transforms_for_val_test = transforms.Compose([ transforms.Resize(input_size), transforms.CenterCrop(input_size), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) #class Dataset class CustomDataset(Dataset): def __init__(self, file_list, transform=None): self.file_list = file_list self.transform = transform def __len__(self): return len(self.file_list) def __getitem__(self, idx): img_path = self.file_list[idx] if img_path.split('/')[-1][-3:] == 'jpg': img = Image.open(img_path) if self.transform is not None: img_transform = self.transform(img) label = img_path.split('/')[-1].split('.')[0] if label == 'dog': label = 1 elif label == 'cat': label = 0 return img_transform, label dataset_train = CustomDataset(train_list, transform=transforms_for_train) dataset_valid = CustomDataset(val_list, transform=transforms_for_val_test) dataset_test = CustomDataset(test_list, transform=transforms_for_val_test)오류 발생
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 [데이터과학 Part3]
optimizer.zero_grad()에 관한 질문입니다
"파이토치로 딥러닝 구현 패턴 이해하기" 강의 7:56 부분에서,optimizer.zero_grad()는 기존의 연산을 끊어주는 역할을 하고, 이는 강의에서 전에 작성했던 W.detach_().requires_grad_(True) b.detach_().requires_grad_(True)이 코드와 같은 역할을 한다고 설명해 주셨습니다. 설명을 듣고, pytorch 공식 문서 등에서 관련된 내용들을 찾아보니"detach는 계산된 값과 동일한 저장 공간을 사용하지만, 계산 기록은 없는 tensor를 반환하여 tensor를 과거 계산 기록으로부터 떼어내는 역할을 한다"라는 설명을 찾을 수 있었습니다. 그렇다면, 모델 파라미터의 미분값을 0으로 초기화하는 optimizer.zero_grad()는 W.detach_().requires_grad_(True)이 코드와 엄밀히 따지자면 조금 다른 동작을 하는 것으로 이해하였는데요,'기존의 연산을 끊어준다' 라는 측면에서 조금 동작에 차이가 있다고 보는 것이 맞는지 설명 듣고 싶습니다!감사합니다
-
미해결[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
pytorch custom layer
안녕하세요! pytorch library에 대한 질문이 있습니다.저희는 pytorch로 모델을 구현할 때, nn.Module 오버라이딩하여 사전에 존재하는 모듈을 사용하여 모델을 구축합니다. 예를들어 lstm 같은 경우, 파이토치에 이미 lstm block이 구현되어있어서 그대로 가져다 씁니다. 만약 제가 직접 파이토치 상에서 layer를 직접 구축하고 싶을 때, 어떻게 구축해야하는지 궁금합니다. 파이토치 상에서 구현되지 않은 알고리즘을 파이토치로 구현하고 싶습니다.혹시 참고할 만한 레퍼런스가 있다면 뭐든 너무 감사드립니다.