와인 후기

Barefoot Pink Moscato 를 구입하였다.

좋았던 점: 색이 영롱하다. Deliciously Sweet 이라고 병에 적혀있었는데, 정말 달고 맛있다. 반병을 마시고나니 반나절을 고민하던 버그를 고칠 수 있었다.

유의할 점: 1/3 만 마신다는게 1/4 밖에 안남았다.

11월 말의 잡담

1

내가 가장 좋아하는 조합은 다음과 같다.

칼칼한 어묵탕 + 소주 / 자몽에 이슬

김치찌개 + 청하

해물파전 / 김치전 + 동동주 / 자몽에 이슬 / 복분자주

삼겹살 + 비빔면/비냉 + 소주 / 자몽에 이슬

얼큰한 만두전골 + 소주

금요일만 되면 생각이 나는 그리운 조합이기도 하다.

 

 

 

11월의 일상

1. 나의 이웃에는 머신러닝을 하는 친구들이 산다. ( 이웃 연구실이기도 하다. ) 그래서 자주 토론을 할 수 있다. 토론을 하는 것은 즐거운 일이다 😀

2. 한동안 비가 오고 춥더니 날씨가 다시 맑아지고 따뜻해졌다. 예쁘게 물든 단풍을 보면서 걸으면 기분이 좋아진다.

3. 요새는 크리스마스 재즈 리스트를 들으면서 프로그래밍을 한다. (크리스마스는 아직 멀었지만)

 

 

 

Why does visualizing the filter tell you what the filter is looking for?

If you visualize the first convolutional layer of each neural network, you can see that the first layer looks for oriented edges.


Why does visualizing the filter tell you what the filter is looking for?

This intuition comes from ‘Template Matching’ and ‘Inner Product’.

Imagine you have some template vector, and then imagine you compute a scalar output by taking inner product between your template vector some arbitrary piece of data. Then, the input which maximizes that activation under a norm constraint on the input is exactly when those two vectors match up.

So, in that sense, whenever you are taking an inner products, the thing causes an inner product to excite maximally is a copy of the thing you are taking an inner product with. So, that’s why we can actually visualize these weights and why that shows us what this first layer is looking for.

Pytorch Tutorial : Making Simple Convolutional Network

Hi guys.  I am going to explain how to make simple convolutional network using Pytorch.

(Updating … )

# -*- coding: utf-8 -*-
"""
Created on Tue Nov 13 21:29:47 2018

@author: youngjoong
“””

import torch
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):

def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 5×5 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x)) #(x.size()[0],-1) #(x.size())[0] is batch size, (x.size())[1] is feature size
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features

net = Net()
print(net)

net = Net()
print(net)

for name, param in net.named_parameters():
print(name)

params = list(net.parameters())
print(len(params))
print(params[0].size()) # conv1’s .weight

input = torch.randn(1, 1, 32, 32)
out = net(input)
print(out)

net.zero_grad()
out.backward(torch.randn(1,10))