a = np.arange(12).reshape((3, 4))
t = tf.constant(a)
t
>>>
tf.Tensor(
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]], shape=(3, 4), dtype=int32)
위와 같은 (3, 4) dimension을 갖는 텐서가 있다. axis=0은 3개의 원소, axis=1은 4개의 원소가 존재한다. 이 텐서를 전치시키려고 한다면 다음과 같이 할 수 있다.
tf.keras.backend.permute_dimensions(t, pattern=(1, 0))
>>>
<tf.Tensor: shape=(4, 3), dtype=int32, numpy=
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])>
여기서 중요한 인자는 pattern인데, (1, 0)의 의미는 텐서 t를 (axis=1의 값, axis=0의 값)차원으로 재구성한다는 의미이다. 즉, (4, 3) 차원으로 변형되면서 전치가 이루어진다.
a = np.arange(12).reshape((2, 2, 3))
a
>>>
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
t = tf.constant(a)
t
>>>
<tf.Tensor: shape=(2, 2, 3), dtype=int32, numpy=
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])>
tf.keras.backend.permute_dimensions(t, pattern=(2, 1, 0))
>>>
<tf.Tensor: shape=(3, 2, 2), dtype=int32, numpy=
array([[[ 0, 6],
[ 3, 9]],
[[ 1, 7],
[ 4, 10]],
[[ 2, 8],
[ 5, 11]]])>
이전 예제보다 고차원인 (2, 2, 3) shape에 대해 재구성하는 예제이다. (axis=2, axis=1, axis=0)순으로 패턴이 지정되었기 때문에 (3, 2, 2)의 shape을 갖는 텐서가 나타난다.
참고
https://ko.wikipedia.org/wiki/%EC%88%9C%EC%97%B4
https://docs.w3cub.com/tensorflow~2.3/keras/backend/permute_dimensions.html
'[Framework] - Tensorflow' 카테고리의 다른 글
# 0. 데이터 입력 파이프라인 API (0) | 2022.03.01 |
---|
댓글