문제풀이

10-1 Convolution

Untitled

이미지 위에 stride 값 만큼 filter을 이동시키면서 겹쳐지는 부분의 각 원소의 값을 곱해서 모두 더한 값을 출력으로 하는 연산

stride : filter를 한번에 얼마나 이동 할 것인가

padding : zero-padding

Untitled

padding이 1 증가 할 때마다 0으로 둘러 쌓인 boundary 생김

Untitled

torch.nn.Conv2d(*in_channels, out_channels, kernel_size, strdie=1, padding=o, 
								dilation=1, groups=1,bias=True*)

"""
  input image size : 227*227
	filter size = 11 * 11
	stride = 4
	padding = 0
	output image size = ?
"""
conv = nn.Conv2d(1,1,11,stride=4, padding=0)
inputs = torch.Tensor(1,1,227,227)
out = conv(inputs)
out.shape # torch.Size([1, 1, 55, 55])

Neuron 과 Convolution의 차이

Untitled

Max Pooling

(2*2) 안에서 가장 큰 값 내보낸다

Average Pooling

(2*2) 안에서 평균을 계산해서 내보낸다

input = torch.Tensor(1,1,28,28)
conv1 = nn.Conv2d(1,5,5)
# input 채널 1개 output 5개 filter size 5
pool = nn.MaxPool2d(2)
out = conv1(input)
out2 = pool(out)

MNIST CNN

inputs = torch.Tensor (1,1,28,28)
conv1 = nn.conv2d(1,32,3,padding=1)
pool = nn.Maxpool2d(2)
conv2 = nn.conv2d(32,64,3,padding=1)
out = conv1(inputs)
out = pool(out)
out = conv2(out)
out = pool(out)
out = out.view(out.size(0),-1)
fc = nn.Linear(3136, 10)
out = fc(out)

Visdom