이번엔 제발 그만 까먹어야지
tensorflow 1.x의 tf.layers.conv2d(input, filter, kernel_size, strides, padding, data_format='NHWC', dilation_rate=1)
- input [N, H, W, C]
- filter: integer, output space의 차원을 가리킴...channel이라고 생각하는게 빠르다
- kernel_size: 2d convolution을 할 때 쓰는 patch의 size라고 보면 댐, 그니까 kernel이 (3, 3)이고 filter가 32라고 하면 weight matrix는 [3, 3, 32] 크기임
- strides: list or integer, 만약에 dilation!=1 이면 always stride =1
* output size에 관하여....
(N, T, D) -> [conv2d ] -> (N, T/stride, D/stride, C) 이 output이 feature map이라고 부르는데 예를 들어 이 상황에서는 T/stride, D/stride 크기의 C개 피쳐 맵을 갖게 되는 것, where N means batch size, T means frame size, D means mel frequency dim
사실 output size의 풀 버전은... (T_out, D_out) = ( (T+2P-FT/S) + 1, (D+2P-FD/S) + 1 ), FD는 D의 필터 크기, P는 패딩, S는 스트라이드~!
* 필터 수에 따른 컨볼루션 레이어의 정의,, https://tykimos.github.io/2017/01/27/CNN_Layer_Talk/참고
1) 입력은 3*3*1, 필터는 2*2 1개이면 ouptut은 3*3*1
2) 입력은 3*3*1, 필터는 2*2 3개이면 output은 3*3이미지가 총 3개 -> 필터가 여러개니까 출력 이미지도 늘어난 것이라서 합치기 안함;;
3) 입력은 3*3*3, 필터는 2*2 1개이면 output은 3*3*1임 (필터가 1개니까 다 더하는 것~~)
4) 입력은 3*3*3, 필터는 2*2 2개이면 output은 3*3*2임