반응형
랭크 2 이상인 텐서를 다룰때 전치(transpose)같은 변환은 주의를 기울여야 합니다.
넘파이는 arr.shape속성으로 배열 크기를 얻을 수 있습니다. 텐서플로에서는 tf.get_shape함수를 사용합니다. 또는 텐서의 shape속성을 사용합니다.
import tensorflow as tf
import numpy as np
arr = np.array([[1.,2.,3.,3.5],[4.,5.,6.,6.5],[7.,8.,9.,9.5]])
T1 = tf.constant(arr)
s = T1.get_shape()
print('T1의 크기:', s)
print('T1의 크기:', T1.shape)
T1의 크기: (3, 4)
T1의 크기: (3, 4)
T2 = tf.Variable(np.random.normal(size=s))
print(T2)
T3 = tf.Variable(np.random.normal(size=s[0]))
print(T3)
<tf.Variable 'Variable:0' shape=(3, 4) dtype=float64, numpy=
array([[-0.4156755 , -0.37716127, -1.01864513, 1.18228051],
[-0.77202933, -0.06663718, 1.51423624, 1.92920079],
[-0.06983855, 1.21532911, -0.25827128, -0.49263241]])>
<tf.Variable 'Variable:0' shape=(3,) dtype=float64, numpy=array([-0.27734527, 2.79431223, -0.51732042])>
텐서 크기를 바꾸는 방법을 알아보겠습니다. 넘파이에서는 np.reshape이나 arr.reshape을 사용합니다. 텐서플로에서는 tf.reshape함수를 사용하여 텐서 크기를 바꿉니다. 넘파이에서처럼 차원 하나를 -1로 지정할 수 있습니다. 이 차원 크기는 배열 전체 크기와 다른 차원에 지정한 크기를 바탕으로 결정됩니다.
#tensor ver2.0
T4 = tf.reshape(T1, shape=[1,1,-1])
print(T4)
T5 = tf.reshape(T1, shape=[1,3,-1])
print(T5)
넘파이에는 배열을 전치할 수 있는 방법이 세가지가 있습니다. arr.T, arr.transpose(), np.transpose(arr)입니다. 텐서플로에서는 tf.transpose함수를 사용합니다. 일반적인 전치 연산 외에 perm=[...]에 원하는 순서대로 차원을 지정하여 바꿀 수 있습니다.
T6 = tf.transpose(T5, perm=[2,1,0])
print(T6)
T7 = tf.transpose(T5, perm=[0,2,1])
print(T7)
tf.split함수를 사용하여 다음과 같이 텐서를 작은 텐서의 리스트로 나눌 수도 있습니다
t5_split = tf.split(T5, num_or_size_splits=2, axis=2)
print(t5_split)
출력 결과는 더 이상 하나의 텐서가 아니라 텐서의 리스트입니다.
마지막으로 또 다른 유용한 변환은 텐서 연결입니다. 크기와 dtype이 같은 텐서 리스트가 있다면 tf.concat함수로 연결하여 하나의 큰 텐서를 만들 수 있습니다.
t1 = tf.ones(shape=(5,1), dtype=tf.float32)
t2 = tf.zeros(shape=(5,1), dtype=tf.float32)
print(t1)
print(t2)
t3 = tf.concat([t1,t2], axis=0)
print(t3)
t4 = tf.concat([t1,t2], axis=1)
print(t4)
반응형
'ML & AI Theory' 카테고리의 다른 글
tf.keras 모델의 저장과 복원 (0) | 2021.07.13 |
---|---|
tf.keras API. Sequential 모델 실습 (0) | 2021.07.11 |
텐서플로의 계산 그래프 : 1.0 vs 2.x 버젼 차이 (0) | 2021.07.10 |
텐서플로, 랭크와 텐서를 확인하는 방법 (0) | 2021.07.06 |
다층 신경망의 활성화 함수 : 시그모이드, 소프트맥스, 하이퍼볼릭탄젠트, 렐루함수 (0) | 2021.07.05 |
케라스 실습] tf.keras API를 사용한 다층 신경망 훈련 기본 (0) | 2021.07.04 |
텐서플로우 #1] 텐서플로우의 시작과 배열 구조 다루기 (0) | 2021.07.03 |
RNN 실전실습 : 시퀀스 모델링을 위한 다층 RNN구현 : IMDB 영화리뷰 구현 (0) | 2021.06.28 |