import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import Conv2D
N, n_H, n_W, n_C = 1, 5, 5, 3
n_filter = 5
k_size = 4
images = tf.random.uniform(minval=0, maxval=1,
shape=(N,n_H,n_W,n_C))
# Forward Propogation(Tensorflow)
conv = Conv2D(filters=n_filter, kernel_size=k_size)
Y = conv(images)
print(f"Y.shape : {Y.shape}\n")
print(f"Y : \n{Y.numpy().squeeze()}\n")
# Output
Y.shape : (1, 2, 2, 5)
Y :
[[[-0.20035964 -0.0273858 0.61534065 -0.1894783 -0.21524388]
[-0.50362647 0.13066293 1.0642405 0.90791166 0.27396682]]
[[-0.04333424 -0.06945033 1.0375061 0.01980186 0.17100859]
[ 0.07311662 0.06280583 0.78456306 -0.00442532 -0.13051277]]]
실제 코드의 결과는 각 행렬의 (i,j) 원소끼리 열을 구성하고 있다. 위의 그림처럼 일반적인 (channel, height, width) 형태로 output의 shape을 만들어주기 위해서는 아래의 코드를 사용할 수 있다.
# (1*5*5*3) → (1*2*2*5) → (5*2*2)
Y = np.transpose(Y.numpy().squeeze(), (2,0,1))
print(f"Y.transpose.shape : \n{Y.shape}\n")
print(f"Y.transpose : \n{Y}\n")
# Output
Y.transpose.shape :
(5, 2, 2)
Y.transpose :
[[[-0.20035964 -0.50362647]
[-0.04333424 0.07311662]]
[[-0.0273858 0.13066293]
[-0.06945033 0.06280583]]
[[ 0.61534065 1.0642405 ]
[ 1.0375061 0.78456306]]
[[-0.1894783 0.90791166]
[ 0.01980186 -0.00442532]]
[[-0.21524388 0.27396682]
[ 0.17100859 -0.13051277]]]
'Programming > python-deep learning' 카테고리의 다른 글
[tensorflow] RaggedTensor란? (0) | 2024.01.15 |
---|---|
Tensorflow의 Loss Function과 Metrics의 차이 (0) | 2023.10.05 |
Pytorch로 Tensor Operation 다루는 법! (기본 기능 모음) (0) | 2023.09.01 |
Tensor란 무엇인가? (+ Python Numpy Tensor 구현 및 기본 기능) (1) | 2023.08.31 |
Pretrained model, checkpoints, Fine-Tuning, Transfer Learning 정리 (0) | 2023.07.05 |