전체 글

Tips

[Tips] Class 변수 vs Instance 변수

https://engineer-mole.tistory.com/99 [python] python 인스턴스 변수와 클래스 변수 클래스가 가지는 변수에는 클래스 변수와 인스턴스 변수 두 종류가 존재한다. 이 포스팅에서는 변수의 선언 방법이나 차이점에 대해 설명한다. 1. 인스턴스 변수란 인스턴스변수란 각각의 인스 engineer-mole.tistory.com 1. Instance Variable Instance Variable은 각각의 인스턴스 마다 독립한 변수이다. 1) Instance Variable의 선언과 접근 방법 instance variable를 만드는 경우는 클래스 내의 메소드에 아래와 같이 작성한다. 일반적으로 instance variable의 생성은 Constructor 클래스 __init_..

Research/Paper Review

[Code Review] ResNet

Block 구조 BasicBlock: ResNet 18, 34 Bottleneck: ResNet 50, 101, 152 Q. ResNet의 Architecture를 보면 Pooling을 맨 처음과 맨 끝을 제외하고 사용하지 않는다. 그렇다면 Feature Map의 size를 어떻게 줄이는가? A. 실선을 Projection Shorcut, 점선을 Identity Shortcut 이라 한다. Projection은 $1 \times 1$ Convolution이며, Down-Sampling (with stride=2) 및 Channel ($1 \times 1$ Convolution) 수를 맞춰준다. 만약 Size가 같을 때는 stride=1로 맞춰준다. BasicBlock 정의 import torch impo..

Research/Paper Review

[Code Review] AlexNet

import torch import torch.nn as nn import torch.nn.functional as F class AlexNet(nn.Module): def __init__(self, num_classes=1000): super(AlexNet, self).__init__() ### CNN Layers self.features = nn.Sequential( # Conv1 nn.Conv2d(in_channels=3, out_channels=96, kernel_size=11, stride=4), nn.ReLU(inplace=True), # non-saturating function nn.LocalResponseNorm(size=5, alpha=1e-4, beta=0.75, k=2), nn.Ma..

AI Fundamentals/BITAmin DL

[BITAmin DL] Session 3.1 - DL Basics 7 (CNN)

1. CNN 등장배경 기존의 Neural Network는 모두 Fully-Connected Layer 장점: 세상의 모든 정보가 공개되어 있고. 그 정보가 데이터로 존재한다면 알고 싶은 모든 정보를 예측해낼 수 있다 단점: 현실은 모든 데이터가 정리되어 있지 않고 Overfitting의 위험이 존재한다 Image Data Gray Scale (흑백 사진): $H \times W \times 1$ Channel이 1개만 존재 Channel이 없다고 생각하면 안됨: $H \times W$ 가 아니라 $H \times W \times 1$로 Channel까지 반드시 고려해줘야 함 Color Image (칼러 사진): $H \times W \times C$ Channel이 R, G, B로 3개 존재 일반적으로 ..

Research/Paper Review

[Paper Review] SENet (Squeeze-and-Excitation Networks)

https://ieeexplore.ieee.org/document/8578843 Squeeze-and-Excitation Networks Convolutional neural networks are built upon the convolution operation, which extracts informative features by fusing spatial and channel-wise information together within local receptive fields. In order to boost the representational power of a network, se ieeexplore.ieee.org 1. Abstract 최근 Building Block을 중심으로 CNN이 발전하..

Tips

[Tips] Global Average Pooling (GAP) 이란?

1. Global Average Pooling Global Average Pooling이란 기존에 Feature Map의 $H' \times W'$의 특정 영역을 Subsampling 하지 않고 채널 단위로 평균값을 추출하는 방법이다. $z_c = \frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} u_c(i, j)$ 각 Channel $C$의 Global Average: $z_c$ 각 Channel의 Feature Map $u_c$의 모든 요소의 평균값을 계산 $H \times W$ 크기의 Feature Map에서 모든 요소 $(i, j)$의 값을 합한다 이후 총 요소 수 $H \times W$로 나누어 $z_c$를 얻는다 3D Output Feature map을..

Tips

[Tips] nn.MSELoss vs F.mse_loss

Q. F.mse_loss와 nn.MSELoss 간의 차이는 무엇인가? A. 아무런 차이가 없다. 다만, 사용하는데 있어서 사용법이 다를 뿐이다. 만약 nn.MSELoss를 사용하고자 한다면 아래의 2가지 경우와 같이 사용 가능하다. criterion = nn.MSELoss() loss = criterion(outputs, batch_y) # or loss = nn.MSELoss()(outputs, batch_y) 다만, 다음과 같이 사용하면 절대 안된다. 왜냐하면 MSELoss object를 먼저 생성하고, 이후에 적용해야 하기 때문이다. loss = nn.MSELoss(outputs, batch_y) That is, you have to construct an MSELoss object first, a..

Tips

[Tips] F.softmax( )의 dim parameter

F.softmax( )의 parameter dim에 대해 알아보자. 시각화가 가능한 tensor에 대해 1차원, 2차원일때를 관찰한다. 1차원 tensor F.softmax(input_tensor, dim=0) 1차원 tensor는 dim=0인 axis만 존재하므로 무조건 dim=0이다 1차원 tensor를 2차원 tensor처럼 착각해서 dim=0인데 왜 가로로 합이 1이지..? 라는 실수는 하지 말도록 하자. import torch import torch.nn.functional as F # 3개의 원소를 가진 벡터 텐서 정의하고 소프트맥스 함수의 입력으로 사용 z = torch.FloatTensor([1, 2, 3]) hypothesis = F.softmax(z, dim=0) print(hypoth..

AI Fundamentals/BITAmin DL

[BITAmin DL] Session 2.2 - DL Basics 6 (OOP, PyTorch Model Implementation, Train & Validation & Test Logic)

1. OOP Basics Class 제품의 설계도 Object 설계도로 만든 제품 하나의 Class로부터 여러 개의 객체를 생성할 수 있음 OOP Terms Class: 제품의 설계도 Object: 설계도로 만든 제품 Attribute(member, 속성): Class 안의 변수 Method(메소드): Class 안의 함수 Constructor(생성자, __init__): Object 생성시 실행되는 함수 Instance(인스턴스): 메모리 내에 살아있는 객체 Class 만들기 Constructor & Method class Pokemon: def __init__(self, name, types): # Constructor self.name = name self.types = types def say(s..

Jae.
Steady & Persistent