일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- weight histogram
- #ubuntu 14.04(LTS)
- Ubuntu동글
- 화면확대고정
- 치환 기능
- Rust설치
- Hidden layer output
- canon mf416dw
- Lagrange Multiplier
- 리눅스 비밀번호
- restnet
- tensorboard
- #python gpu
- DenseNet
- 듀얼부트
- Git branch 보이기
- log파일
- 학습성공
- #cudnn
- ubuntu 원격
- stepsize
- 포트번호 변경
- twolay
- Xpad설치
- Ubuntu 설치
- #enviroment variable
- 3D convolution
- 전체내용
- VGGNet
- #cuda
- Today
- Total
save the world
6주차 본문
5주차 - 설연휴
<2018.02.19. 월>
Model Output Channel
Tensorflow에서 100 x 100 x 1(grey color)의 input 이미지를 통해 학습되는 3 x 3 크기의 첫번째 커널(W1) 채널 수가 10 이면 W1 = [3, 3, 1, 10] 이다. 이 때 두번째 커널(W2)의 채널 수가 20이면 convolution의 결과가 [row, col, 10, 200] 이 되어야하는 것 아닌가 하는 생각이 들었다. 그러나 W2 커널의 채널수가 20 이면 결과 채널수도 20이 되는데 이유는 이 때 컨볼루션이 3D 컨볼루션이기 때문이다. 그림으로 보자면 아래와 같다.
<convolution layer에서 convolution결과>
위 그림에서처럼 채널이 10개짜리인 커널이 채널이 10인 input과 컨볼루션 되므로 출력은 하나의 채널이 된다.
그러나 이런 커널을 이용한 컨볼루션을 20번하여 출력되는 채널은 20개가 되는 것이다.
<2018.02.22. 목>
2월 셋째주 회의내용
Residual(blur-latent)을 학습하는 방법은 어떨까?
VGGNet을 사용하면 어떨까?
Normal는 0~1사이로하고 Kernel을 Normalize 하는것이 보통이다.
'icandoit7.py' 71번째줄에 Blurred_data 에서 나누기를 그냥 255로 하기 (무슨뜻이었는지 기억이 잘 안남)
VGGNet19 적용하기
https://github.com/machrisaa/tensorflow-vgg 에서 'vgg19_trainable.py' 파일과 vggNet 논문을 참고하여 vggnet의 구조를 따르는 DeblurrNetwork를 구성해본다.
<2018.02.25. 일>
VGGNet 구조 적용
19개의 레이어로 구성된 VGGNet에 마지막 하나의 layer을 추가하여 20개의 layer로 학습을 시켰다.
기존 VGGNet19에서 마지막 레이어는 FC 레이어로서
1. 25088개의 pixel을 4096개의 출력
2. 4096개의 입력으로 4096개의 출력
3. 4096개의 입력으로 1000개의 출력 (이 layer 까지는 기존 VGGNet과 동일)
4. 1000개의 입력으로 픽셀값 0~255까지이므로 256개의 출력 (추가한 layer)
0~255까지의 softmax값을 출력하도록 layer를 구성했으므로 이를 평가 할 label 또한 MNIST의 Label 처럼 one hot encoding을 하여 학습 label로 사용하였다.
그러나 예전처럼 학습결과는 좋아지지 않았으며 픽셀의 예측값이 0~ 255사이의 특정한 두개의 숫자에서 수렴되어 버리는 현상이 나타났다.
<2018.02.27. 화>
Input label 값 miss match
Latent 이미지의 center pixel 값이 cost를 계산하던 label 값과 달랐다. latent이미지와 cost를 계산할 때의 이미지가 달랐다... (1번문제를 풀고 2번문제의 답을 보고 채점한 것 과 같은 상황) 이유는 batch를 따로 실행했기 때문이다. 아래의 코드는 배치를 따로 실행시켜 잘못된 데이터가 생성된 예이다.
위의 코드에서 6번째 줄과 7번째줄이 tf.train.batch를 각각 실행하기 때문에 다른 순서로 batch가 쌓여 miss match가 되고 있었다. 그러므로 위의 6, 7번째 줄을 지우고 8번째 줄만 입력하면 문제가 해결된다.