묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
yolo5 custom data training
안녕하세요! cvat로 어노테이션을 진행한뒤 yolo 5 로 학습할대 에러가 나와서 문의 드립니다. 학습을 한 셀에서 결과가 .... 20 epochs completed in 0.033 hours. Optimizer stripped from content/dataset/result/plt/weights/last.pt, 92.8MB Optimizer stripped from content/dataset/result/plt/weights/best.pt, 92.8MB Validating content/dataset/result/plt/weights/best.pt... Fusing layers... Model summary: 267 layers, 46129818 parameters, 0 gradients, 107.7 GFLOPs Class Images Instances P R mAP50 mAP50-95: 0% 0/8 [00:00<?, ?it/s]Exception in thread Thread-8: Traceback (most recent call last): File "/usr/lib/python3.8/threading.py", line 932, in bootstrapinner self.run() File "/usr/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/content/yolov5/utils/plots.py", line 287, in plot_images cls = names[cls] if names else cls KeyError: 0 이후에... Exception in thread Thread-10:Exception in thread Thread-12:에러가 납니다. 어떤 문제일까요??; - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 강의 내용을 질문할 경우 몇분 몇초의 내용에 대한 것인지 반드시 기재 부탁드립니다. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨수학 없이 시작하는 인공지능 첫걸음: 기초부터 최신 트렌드까지
노션 자료는 언제 오픈하나요?
노션 자료를 1월에 오픈한다고 하셨는데요~언제쯤 볼 수 있을까요?
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
멀티GPU시스템에 맞게 프로그램을 수정하고 싶습니다.
늘 좋은 강의 해주셔서 감사합니다. '[개정판] 딥러닝-컴퓨터비전-완벽가이드'를 수강하다가 질문이 있어서 글을 남깁니다. 제가 사용하는 멀티GPU시스템에서 'efficientdet_train_pascal_voc.ipynb'을 수정하여 원하는 GPU에서 프로그램을 동작하고 싶습니다. 'efficientdet_train_pascal_voc.ipynb'를 실행하는 도중 ==================================================if tf.config.list_physical_devices('GPU'): ds_strategy = tf.distribute.MirroredStrategy(devices=["gpu:2", "gpu:3"])else: ds_strategy = tf.distribute.OneDeviceStrategy('device:CPU:0')#steps_per_execution은 ModelCheckpoint의 save_freq를 숫자로 설정할 시 적용. num_epochs, steps_per_epoch는 추후에 model.fit()에서 설정되지만, 여기서는 일단 값을 설정해야함. params = dict( profile=TRAIN_CFG.profile, mode = TRAIN_CFG.mode, model_name=TRAIN_CFG.model_name, steps_per_execution=TRAIN_CFG.steps_per_execution, num_epochs = TRAIN_CFG.num_epochs, model_dir=TRAIN_CFG.model_dir, steps_per_epoch=steps_per_epoch, strategy=ds_strategy,# strategy=TRAIN_CFG.strategy, batch_size=TRAIN_CFG.batch_size, tf_random_seed=TRAIN_CFG.tf_random_seed, debug=TRAIN_CFG.debug, val_json_file=TRAIN_CFG.val_json_file, eval_samples=TRAIN_CFG.eval_samples, num_shards=ds_strategy.num_replicas_in_sync )config.override(params, True)# image size를 tuple 형태로 변환. 512는 (512, 512)로 '1920x880' 은 (1920, 880) 으로 변환. config.image_size = utils.parse_image_size(config.image_size)==================================================를 실행하면 다음과 같이 GPU:2와 3가 잡힙니다. (여기서 궁금한 점이 있는데요, 갑자기 왜 GPU:2와 3의 메모리를 22.7G나 잡아버리나요?)계속해서 'efficientdet_train_pascal_voc.ipynb'을 실행하다가 다음을 실행하면 ======================================================# 강의영상에는 from keras import anchors 이지만 efficientdet 패키지의 keras 모듈이 tf2 로 변경됨.from tf2 import train_libfrom tf2 import train# 20개의 class를 가진 efficientdet d0 모델을 생성. model = train_lib.EfficientDetNetTrain(config=config)======================================================갑자기 GPU:0가 잡히면서, 그 이후의 모든 프로그램 코드가 GPU:0에서만 동작을 합니다. (GPU:2와 3은 아무런 동작이 없습니다. )그래서 'train_lib.EfficientDetNetTrain(config=config)'을 고쳐보려고 하는데, 생각보다 쉽진 않네요... 구글 코랩에서 'EfficientDetNetTrain'을 찾아봐도 "A customized trainer for EfficientDet."이라고만 나와있습니다. 어떻게 해야할지 조언을 주세요... 감사합니다.
-
미해결[PyTorch] 쉽고 빠르게 배우는 GAN
DCGAN 실습에 있는 celba 이미지 다운로드 권한 요청
안녕하세요..강의를 듣고 있는 학생입니다.DCGAN 의 강의를 실습을 하고자 하는데 구글 drive 에 대한 접근 권한이 필요하여 문의 드립니다.접근 권한 어떻게 신청하면 될지 문의 드립니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
선생님 실행 오류가 계속납니다.
1 # 아래를 수행하기 전에 kernel을 restart 해야 함.2.ImportError: /usr/local/lib/python3.8/dist-packages/mmcv/_ext.cpython-38-x86_64-linux-gnu.so: undefined symbol: ZN2at4ops7resize_4callERKNS_6TensorEN3c108ArrayRefIlEENS5_8optionalINS5_12MemoryFormatEEE 이러한 에러가 발생하는데 import torch 하고 쿠다버전을 확인해서 cu116으로 바꾸어 주었습니다. 그리고 밑에 실행했고, 런타임을 다시 한 뒤에 import mmdet~을 했지만 이와 같은 결과가 지속되고 있습니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
코랩 실행 오류 문제입니다!
/usr/local/lib/python3.8/dist-packages/mmcv/__init__.py:20: UserWarning: On January 1, 2023, MMCV will release v2.0.0, in which it will remove components related to the training process and add a data transformation module. In addition, it will rename the package names mmcv to mmcv-lite and mmcv-full to mmcv. See https://github.com/open-mmlab/mmcv/blob/master/docs/en/compatibility.md for more details. warnings.warn(이라고 뜨는데, 런타임을 초기화 하고 !pip install mmcv-full 로 설치를 해도 안됩니다!
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
강사님 mmdet.apis import중 에러가 발생하는 원인을 알고 싶습니다.
안녕하세요. 강사님 mmdet.apis import중 아래와 같은 에러가 생겼습니다. 처음 not found model에러는 런타임 다시 시작후, 사라졌는대 사진과 같은 에러가 발생했습니다.mmcv-full -f로 설치해도 동일한 에러가 발생합니다.Python : 3.8torch : 1.13.1cuda : 11.6환경은 colab입니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
학습 질문입니다!
선생님 너무 좋은 강의 감사합니다! 이해가 잘 됩니다. 다만 제가 궁금한게 있는데 실무에 가게되면 이러한 소스코드를 하나 하나 작성할 수 있는 개발자가 되어야 하는건가요? 실습파트를 보면서 '아 이렇게 실행이 되는구나' 정도로만 알고 넘어가고 있는데, 어떠한 방향으로 학습을 진행하면 좋을지 조언을 구하고 싶습니다.
-
미해결U-Net 구현으로 배우는 딥러닝 논문 구현 with TensorFlow 2.0 - 딥러닝 의료영상 분석
성능평가관련해서 질문좀 드리겟습니다
강사님 안녕하세요 성능평가관련해서 질문좀 드리겟습니다 . 일반적으로 세그멘테이션은 accurary보다 mAP 혹은IOU로 평가하는걸로 아는데 그럼 아래코드 metrics = ["accurary"]를 어떻게 바꾸어야 하는지요?바쁘시겟지만 조언 좀 부타드리겟습니다 ㅎ unet_model.compile(optimizer = optimizer, loss = binary_loss_object, metrics = ["accurary"])
-
미해결[Pytorch] 파이토치를 활용한 딥러닝 모델 구축
nn.CrossEntropyLoss() method 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.좋은 강의 항상 감사드립니다.nn.CrossEntropyLoss() 는 nn.LogSoftmax 와 nn.NLLLoss 연산의 조합이라고 말씀해 주셨고, cross-entropy는 아래와 같은 식인 것으로 알고 있습니다.위 식에서 log는 한번만 취해지는 것으로 보입니다. 그런데 CrossEntropyLoss가 LogSoftmax 와 NLLLoss 연산의 조합이라면 Log 함수가 두번 사용 되는 것 같아서 이해가 잘 되지 않습니다.설명을 해주시면 감사드리겠습니다 :-)
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
선생님 세그멘테이션관련 질문을 드립니다 ㅎ
선생님 안녕하세요이번에 선생님강의 머신러닝2개, 컴퓨터비젼2개를 모두 완강한 열혈팬 회사원입니다 ㅎㅎㅎ선생님 강의 덕분에 이번에 회사에서 세그멘테이션을 담당하게 되엇는데, 세그멘테이션강의관련 질문이 잇어서 이렇게 메일을 드립니다 ㅎ 바쁘시겟지만 조언 좀 부탁드리겟습니다<배경>이번에 검출할 객체(첨부파일)는 바늘과 같이 아주 가늘고 긴 객체(섬유)인데 이미지1장당 객체전체면적이 0.5 - 2%밖에 없는 아주 미세한 객체입니다. 실제원본데이터에서도 객체는 눈으로 자세히 보아야 검출할수 잇을정도입니다 ㅎ (학습데이터30장, 학습마스크영상 30장, 테스트데이터 5장 ). 사용모델은 깃헙에서 공개한 U-NET모델로 세그멘테이션을 수행햇는데, 첫epoch부터 정확도가 90%이상, 로스가 0.1이하로 상당히 높은 성능을 보엿는데 예측결과이미지영상에는 아무것도 검출이 안된 상태(완전검은영상)입니다. 참고로 다른 이미지데이터를 가지고 U-NET모델로 세그멘테이션을 수행해본결과 예측결과도 상당히 잘되어서 모델에는 문제가없는것으로 판단햇습니다.여기서 조언을 좀 부탁드리겠습니다.1> 정확도는 90%이상, 로스가 0.1이하인데 아무것도 검출이 안되엇다는 것은 , 객체가 너무미세해서 검출을 못한걸로 이해해도 되는지요?2> 이런경우 성능을 올리기 위한방법으로 오그멘테이션방법도 잇는데, 특히 사용해야할 오그멘테이션방법이 잇는지요? 참고로 확대기능등을 사용햇습니다.3> 다른방법으로 선생님CNN강의에서사용한 mark-rcnn 방법도 해볼려고 하는데, 어떻게 생각하시는지요?글을 적다보기 글이 너무 길어져서 죄송합니다, 바쁘시겟지만 조언 좀 부탁드리겟습니다 ㅎ
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
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)오류 발생
-
해결됨Google 공인! 텐서플로(TensorFlow) 개발자 자격증 취득
실습자료 내용 문의입니다.
"VGG16 모델을 활용한 전이학습" 강의의 실습자료에서compile 부분 설명의 전처리 단계에서 원핫인코딩이 되어있다고 설명문구가 있는데, 원핫인코딩이 된 게 맞나요?바로 밑의 complie loss="sparse_categorical_crossentropy"는 원핫인코딩이 안되어 있을 때 사용하는 옵션으로 배워서 여쭤봅니다!
-
미해결처음하는 딥러닝과 파이토치(Pytorch) 부트캠프 (쉽게! 기본부터 챗GPT 핵심 트랜스포머까지) [데이터분석/과학 Part4]
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)이 코드와 엄밀히 따지자면 조금 다른 동작을 하는 것으로 이해하였는데요,'기존의 연산을 끊어준다' 라는 측면에서 조금 동작에 차이가 있다고 보는 것이 맞는지 설명 듣고 싶습니다!감사합니다
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
mm_mask_rcnn_train_balloon에서 좌표에 0.5를 더하는 이유?
mm_mask_rcnn_train_balloon.ipynb 실습 convert_balloon_to_coco() 함수 구현에서 poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]위와 같이 원래 좌표에 0.5를 더하는 이유를 알고 싶습니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
Soft max Class score 질문입니다!
오른쪽 처럼 car: 0.8 이라고 되어있는데 이는 vgg/resnet 학습시에 label 데이터와의 대조를 통하여 산출한 값인가요?현업에서쓰는 label 데이터는 주로 어떤걸 쓰는지 궁금합니다!
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
Cofidence threshhold 질문입니다!.
오른쪽 0.9 흰색 박스 안에 차의 Confidence threshold를 0.9라는 값이 나오는 것은 "유사도 90%미만의 이미지는 적용 하지 않는다."의 의미로 해석을 했는데, 이 때도 Object Localization을 통해 바운더리 박스를 찾고 난 뒤 그 이미지와의 유사도가 90%이하면 버린다. 라고 해석했는데 맞나요?
-
미해결딥러닝 CNN 완벽 가이드 - Fundamental 편
회귀 문제 해결 시 딥러닝 vs 머신러닝 질문드립니다.
안녕하세요. 권철민 선생님.저는 회사에서 업무 적용을 위해 머신러닝과 딥러닝을 공부하고 있습니다.그동안 딥러닝은 매우 방대한 데이터와 복잡한 차원 연산이 필요한 이미지 처리 등에 활용되고 머신러닝은 비교적 정형화된 데이터의 회귀, 분류 등에 활용되는 것으로 알고 있었습니다.근데 최근 상사로부터 딥러닝을 이용해 데이터를 회귀 분석하라고 요구 받았습니다. 머신러닝과 딥러닝을 혼동하셔서 그렇게 말씀하신 건지는 모르겠습니다만..이에 어떤 경우에는 딥러닝으로, 또는 머신러닝으로 회귀 문제를 푸는 것이 유리한지 두 방법의 장단점을 알고 싶습니다.그리고 만약 딥러닝으로 회귀 문제를 푸는 것이 유리한 경우가 있다면.. 본 강좌에는 CNN 중심으로 설명하고 있는데 타 강의를 참고해야 할까요? ㅠㅠ
-
미해결딥러닝 CNN 완벽 가이드 - Fundamental 편
필터 관련문의
강의 잘 듣고 있습니다.지금 CIFAR 데이터셋 CNN구현 실습 부분을 보고 있으면서 궁금한점 이 생겨 문의드립니다. 학습시 Conv2D, Activation, Maxpooling2D 같은 필터 개수는 어떻게 정의하는건가요 ? param이 어떻게 변하는지는 설명을 잘 해주셔서 이해했는데, Conv2D 등을 통해 필터시 어떤 기준으로 여러번 사용하는지가 이해가 안되내요. 감사합니다.
-
미해결[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지
pytorch custom layer
안녕하세요! pytorch library에 대한 질문이 있습니다.저희는 pytorch로 모델을 구현할 때, nn.Module 오버라이딩하여 사전에 존재하는 모듈을 사용하여 모델을 구축합니다. 예를들어 lstm 같은 경우, 파이토치에 이미 lstm block이 구현되어있어서 그대로 가져다 씁니다. 만약 제가 직접 파이토치 상에서 layer를 직접 구축하고 싶을 때, 어떻게 구축해야하는지 궁금합니다. 파이토치 상에서 구현되지 않은 알고리즘을 파이토치로 구현하고 싶습니다.혹시 참고할 만한 레퍼런스가 있다면 뭐든 너무 감사드립니다.