Tensorflow
1. Dense layer, Linear layer 차이
- Dense layer는 Affine func(xw+b) + Activation func(sig, tanh, relu)
- Linear layer는 Affine func만 Activation func 붙여줘야함
- torch는 Linear layer만 있음!
2. Sequential 클래스의 add메소드

깃헙: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/keras/engine/sequential.py
sequential 클래스의 add메소드가 stack으로 쌓인다고 하는데 실제로 add로 쌓인 레이어들은 스택으로 빼서 사용하지 않는단말이지(스택은 라스트인 퍼스트아웃) 찾아보니까 Sequential에서 스택이라는 용어는 일반적인 스택과 다른 의미인데
스택이 각 레이어를 차례대로 쌓는다는 의미이고 실제 동작할 때는 First in First out 방식으로 동작한다는 거
즉, 레이어가 추가된 순서대로 계산된다는 점
왜 스택이라는 단어를 사용했냐면 레이어를 차례대로 쌓아 올리는 방식이 직관적이기 때문임
흔히 사용하는 자료구조의 의미와는 다르지만 이해를 위해서 사용했다함!
Pytorch
1. nn.Relu(), F.relu()
- nn.Relu(): torch.nn 모듈의 렐루 클래스 사용, 모듈을 초기화하고 호출하는 객체 지향 접근 방식
- F.relu(): torch.nn.functional 모듈의 ReLU함수를 직접 호출, 함수형 접근 방식으로 모듈을 초기화 할 필요 없이 바로 사용
import torch.nn as nn
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.layer1 = nn.Linear(10, 20)
self.relu = nn.ReLU()
self.layer2 = nn.Linear(20, 10)
def forward(self, x):
x = self.layer1(x)
x = self.relu(x)
x = self.layer2(x)
return x
model = SimpleModel()
print(model)
import torch.nn.functional as F
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.layer1 = nn.Linear(10, 20)
self.layer2 = nn.Linear(20, 10)
def forward(self, x):
x = self.layer1(x)
x = F.relu(x)
x = self.layer2(x)
return x
model = SimpleModel()
print(model)
Element wise product VS Matricx multiplication
행렬 곱에서 헷갈리지 말아야 할 내용으로 element wise product와 Matricx muliplication이 있다.
element wise product는 동일 위치의 요소를 곱하여 결과 행렬을 생성하는 것, 이는 특히 크기가 같은 행렬끼리 연산이 가능
matric multiplication은 첫 행렬의 행과 두 번째 행렬의 열을 내적하여 결과 행렬을 생성하는 것 => 이건 우리가 잘 아는 내용이니 스킵
그럼 element wise는 연산이 언제 쓰는 걸까?
이미지 데이터를 처리하는 cnn이 있을때 이 네트워크에 이미지를 인풋 데이터로 넣었다고 하자
우리는 cnn연산이 affine function에 기초한다고 알고 있다.
affine function은 f(x) = xw+b이다.

빨간색 동그라미 첫번째 부터 연산한다고 했을때 element wise는 같은 크기일때 연산만 가능하다고 했으니
x[0:2, 0:2]으로 커널과 동일한 사이즈로 맞춰서 연산해줄 것이다.

즉, element wise는 커널크기만큼 이미지를 잘라서 요소별로 곱할때 사용된다.
Element wise product VS broadcasting
그러면 broadcasting은 어디에서 쓰일까
아직 우리가 연산이 안된 게 있다. 바로 바이어스 더하는 부분!
1번 연산은 끝났기 때문에 2번 연산을 해야하는데

2번 연산을 하려면 바이어스를 똑같은 크기로 맞춰야한다. 똑같이 4개로 만들어줘야한다=> 브로드캐스팅

그 후에 1번 연산을 마친 값이랑 더해줄 거다. 이때 element wise가 된다.

최종적으로 이미지에 cnn 연산(feed forward만)을 한 후 결과는 아래의 이미지처럼 된다.
