안녕하세요! pytorch library에 대한 질문이 있습니다. 저희는 pytorch로 모델을 구현할 때, nn.Module 오버라이딩하여 사전에 존재하는 모듈을 사용하여 모델을 구축합니다. 예를들어 lstm 같은 경우, 파이토치에 이미 lstm block이 구현되어있어서 그대로 가져다 씁니다. 만약 제가 직접 파이토치 상에서 layer를 직접 구축하고 싶을 때, 어떻게 구축해야하는지 궁금합니다. 파이토치 상에서 구현되지 않은 알고리즘을 파이토치로 구현하고 싶습니다. 혹시 참고할 만한 레퍼런스가 있다면 뭐든 너무 감사드립니다.
먼저 질문을 드린 이유는 CNN의 이미지 특징을 추출하는 과정에서 쓰이는, Convolution layer와 Pooling layer의 기능이 동일하고, Padding을 쓰는 이유에 대한 궁금증이 들었기 때문입니다. CNN 이론 강의 내용에서, CNN의 구조는 크게 (1)이미지 특징을 추출하는 부분 과 (2)클래스를 분류하는 부분 이 있다고 배웠습니다. (2)의 경우는 특징을 추출하고 난 뒤에 softmax나 , logsoftmax activation function을 통해, 분류하는 것이기 때문에, CNN 앞 시간에서 배웠던 1차원 형태의 데이터 처리하는 방법과 유사하다고 하셨습니다. Convolution layer는 filter(kenel)이 창문 닦듯이(알고리즘으로 보면 슬라이딩 윈도우 느낌으로) 슥슥 움직이면서 Feature Map(특성 맵)을 추출하는데, 이 부분은 칼라이미지나 흑백이미지의 경우 기존의 1차원 형태의 데이터로 바로 만들어주는 과정에 비해, 공간적/지역적 정보를 유지할 수 있으며, 특정 부분을 추출할 수 있기 때문에 해당 이미지의 특징을 확인할 수 있는 장점을 가집니다. 하지만 영상에서 설명하셨듯이, filter가 적용되면서 중복되는 부분이 발생해서 계산양이 많아지고, 무엇보다 5x5이미지의 경우 3x3필터를 사용했을 때 3x3 크기가 되기 때문에 데이터가 소실되는 문제가 발생한다고 하셨습니다. 따라서, 이를 해결하기 위해, Zero padding을 적용하여, 이미지 가장자리를 0으로 감싸줌으로써 3x3필터를 사용하더라도, 5x5의 원본 이미지의 크기가 3x3 크기가 아닌 5x5로 보존되기 때문에, 데이터 소실을 방지할 수 있다고 들었습니다. Q1: 그래서 여기 까지 들었을 때, 특징을 잘 추출하기 위해 커널의 크기를 작게 했을 때, 원본 크기에 비해, output이 작아질 수도 있으니까 zero padding을 쓰는 것이 중요하구나... 하는 생각과 zero padding을 통해 원본 크기를 보존하는 것이 중요하구나 라고 생각했습니다. 혹시 맞을 까요? 그리고 나서, Pooling 설명을 들었는데, Pooling layer는 convolution layer에서 얻어진 output에서 특징을 뽑아 내는 과정이기 때문에, 얻어진 feature map의 사이즈가 줄어드는 현상이 발생하는데, 특징을 뽑아내는 것도 이해는 가지만, 데이터가 소실되는 문제가 발생할 수 있지 않을까...? 하는 생각이 들었습니다. CNN의 구조가 Convolution layer와 pooling layer가 같이 순서쌍으로 동작하기 때문에, 각각의 기능에 대해서 특징을 추출하는 과정이다는 부분에는 이해는 갔지만, padding의 기능때문에, 특징 맵의 크기를 보존하는 것이 원래 input가 비슷하게 보존하는 것이 좋은건지, 줄여나가는 건지 헷갈립니다.
안녕하세요! 비전 트랜스포머 - 최신 모델 강의에서 예시로 설명해주신 R^65*128에 Epos 인 positional embedding을 더하는데도 R^65*128의 크기에는 변화가 없나요?? 이전에 클래스 정보를 더했을 때는 64에서 +1해서 65가 되었는데 positional embedding을 했을 때는 값에 변화가 없나 궁금해서 질문드립니다.
안녕하세요! 항상 좋은 강의 해주셔서 감사드립니다. '비전 트랜스포머 - 최신 모델' 강의에서 B*N*K 와 1*K*D 를 연산하면 B*N*D 가 된다고 하셨는데 어떤 연산을 통해서 어떻게 B*N*D로 변환되는지 궁금합니다. 그냥 B*N*K에서 단순히 K의 형태를 바꾸는 연산만 하면 안되는 건가요?? 어떤 원리로 연산을 통해 변환이 되는 건지 궁금해서 질문 드립니다. 그리고 연산에서 R^N*D 에서 기호 R은 무엇을 뜻하는지 궁금합니다. 감사합니다.
항상 강의들으면서, 따라치면서, 여러번 반복해서 익히려고 하고 있습니다. 지금까지 별 문제 없이 쏙쏙 이해가 잘 가서, 지금까지 질문을 드리지 않았는데요.. 함수를 작성하는 부분에서 자꾸 인덱스 에러가 나타나서, 제가 어느 부분을 잘못 쓴 건지 모르겠습니다. 선생님께서 작성하신 코드를 그대로 복사해서 넣었는데도 index error가 호출되어서 왜 그런지 모르겠습니다...
안녕하세요. 강사님. torchtext 모듈 import간 에러가 나타나 문의합니다. 섹션 2 sequence Tagging 실습편의 코드를 연습하던 중 load_dataset() 함수를 불러올 때 다음과 같이 AttributeError: module ' torchtext.data ' has no attribute 'Field' 라는 에러가 출력됩니다. 찾아보니 torchtext의 버전문제로 현재 최신버전에서는 torchtext.legacy로 import를 사용해야한다고 합니다만 그럴 경우 ImportError: cannot import name 'unicode_csv_reader' from 'torchtext.utils'라는 에러가 출력되어 어떻게 해결해야할지 궁금합니다. 실습환경: 코랩 운영체제: 우분투 18.04 해당 에러 관련 사이트 링크: https://stackoverflow.com/questions/66516388/attributeerror-module-torchtext-data-has-no-attribute-field
안녕하세요. Transformer에 대해 공부하면서 궁금한 점?이 있어 질문 글을 올리게 되었습니다. Transformer는 기존 seq2seq 구조와 다르게 input이 통째로 들어가서 병렬계산이 가능하다는 장점이 있다고 알고 있었습니다. 하지만 Transformer의 input도 문장의 위치에 따라 Positional Encoding(위치에 따른 sin, cos 값)이 더해지는 형태이기 때문에 일련의 sequence 형태를 가져야 된다 생각했습니다. 위는 제가 만든 그림예시인데, input 문장이 "I am student"라면, "I student am"처럼 순서를 바꿀 경우 positional encoding 값이 위치에 따라 특정 값이 들어가고 기존의 input 값과 다르기 때문에 결과적으로 Transformer의 input도 순서를 가져야만 된다라는 결론에 도달했습니다. 그렇게 된다면 순차적으로 값을 입력하는 기존 RNN 및 LSTM의 seq2seq와 input 측면에서 크게 나아진점이 없어보이는데 이 관점이 맞는걸까요? 제가 생각했던 것을 글로 표현하여 질문을 하다보니, 두서가 없는 점 죄송합니다.
안녕하세요 호형님의 강의를 기본베이스로 듣고, 인터넷에서 이것저것 보면서 1D CNN을 제가 가진 데이터셋 분류에 적용하고있는 학생입니다. CustomDataSet을 만들고 DataLoader구현 후, 훈련과 검증, 테스트를 거치는 코드를 작성하였는데요. 훈련과 검증단계에서는 문제없이 진행되나 다른 섹션을 만들어 테스트코드를 돌리는중 type에러가 발생하였습니다. 왜 같은 dataset과 dataloader인데 test셋에서만 이런 문제가 나타나는건지 알고싶습니다. # 강의질문이 아니라 문제가 된다면 지우겠습니다ㅠㅠ
본 강의에 NLP 방법으로 RNN이 나와있는데 인공지능에는 RNN 뿐만 아니라 GAN도 있고 뭐 여러가지가 있잖아요 그 중에서 RNN 기법을 꼭 사용해야 하는 이유가 있나요? R&D 사업계획서 같은 거를 쓸 때 어떤 토픽에 대한 해결 방법을 무슨 무슨 인공지능 기법을 쓴다고 할 때 그 기법을 쓰는 이유로 반 페이지에서 1페이지 가량 써야한다고 하면 어떤 걸 적는 게 좋을까요?