Tensfor 데이터를 생성할 때 항상 체크해야 하는 것
constant() 상수
li_ten = tf.constant([1, 2, 3])
li_ten
예)
tu_ten = tf.constant(((1, 2, 3), (1, 2, 3)), name="sample")
# name 매개변수는 TensorFlow에서 그래프 내의 텐서에 이름을 지정하는 데 사용해 그래프를 시각화할 때 텐서의 이름이 그래프 내에서 노드를 식별할 수 있으며,
# 디버깅시에도 이름을 통해 특정 텐서를 쉽게 식별할 수 있다
#이런 식으로 상수로 지정
arr = np.array([1., 2., 3.])#, dtype='float64')
arr_ten = tf.constant(arr)
arr_ten
tf.cast
데이터 타입을 변경할 수 있다.
예)
>>> tensor = tf.constant([1, 2, 3], dtype=tf.float32)
<tf.Tensor: shape=(3,), dtype=float32, numpy=array([1., 2., 3.], dtype=float32)>
>>> tf.cast(tensor, dtype=tf.int16)
<tf.Tensor: shape=(3,), dtype=int16, numpy=array([1, 2, 3], dtype=int16)>
특정 값의 Tensor 생성
tf.ones
tf.zeros
tf.range
예)
>>> tf.ones(1) #(1,) 크기를 1로 채움
<tf.Tensor: shape=(1,), dtype=float32, numpy=array([1.], dtype=float32)>
>>> tf.zeros((2, 5), dtype="int32")
<tf.Tensor: shape=(2, 5), dtype=int32, numpy=
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]], dtype=int32)>
>>> tf.range(1, 11)
<tf.Tensor: shape=(10,), dtype=int32, numpy=array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=int32)>
Random Value
tf.random.normal
: 정규분포tf.random.uniform
: 균등분포>>> shape = (3, 3)
>>> tf.random.normal(shape)
<tf.Tensor: shape=(3, 3), dtype=float32, numpy=
array([[-1.9329838 , 0.9024088 , 0.2481542 ],
[-0.8762734 , -0.9606199 , -1.6851379 ],
[-0.8557409 , 0.13063392, 0.2690312 ]], dtype=float32)>
Random Seed 로 난수 고정
tf.random.set_seed({seed_number})
로 Rnadom Seed를 고정해두고 개발한다.
Variable 변수
변수 생성 + 초기화
를 의미한다.예)
>>> tensor = tf.constant([[1.0, 2.0], [3.0, 4.0]])
>>> arr = np.array([[1, 2], [3, 4]])
>>> li = [[1, 2], [3, 4]]
>>> te_var = tf.Variable(tensor)
>>> arr_var = tf.Variable(arr)
>>> li_var = tf.Variable(li)
>>> print(te_var)
>>> print(arr_var)
>>> print(li_var)
<tf.Variable 'Variable:0' shape=(2, 2) dtype=float32, numpy=
array([[1., 2.],
[3., 4.]], dtype=float32)>
<tf.Variable 'Variable:0' shape=(2, 2) dtype=int32, numpy=
array([[1, 2],
[3, 4]])>
<tf.Variable 'Variable:0' shape=(2, 2) dtype=int32, numpy=
array([[1, 2],
[3, 4]])>
>>> a = tf.Variable([2.0, 3.0])
>>> print("First : ", a, "\n")
>>> a.assign([1, 2])
>>> print("Second : ", a, "\n")
First : <tf.Variable 'Variable:0' shape=(2,) dtype=float32, numpy=array([2., 3.], dtype=float32)>
Second : <tf.Variable 'Variable:0' shape=(2,) dtype=float32, numpy=array([1., 2.], dtype=float32)>
Tensor 연산
tf.add
: 덧셈tf.subtract
: 뺄셈tf.multiply
: 곱셈tf.divide
: 나눗셈tf.pow
: n-제곱tf.negative
: 음수 부호tf.abs
: 절대값tf.sign
: 부호tf.round
: 반올림tf.ceil
: 올림tf.floor
: 내림tf.square
: 제곱tf.sqrt
: 제곱근tf.maximum
: 두 텐서의 각 원소에서 최댓값만 반환.tf.minimum
: 두 텐서의 각 원소에서 최솟값만 반환.tf.cumsum
: 누적합tf.cumprod
: 누적곱차원 축소 연산
tf.reduce_mean
: 설정한 축의 평균을 구한다. tf.reduce_max
: 설정한 축의 최댓값을 구한다. tf.reduce_min
: 설정한 축의 최솟값을 구한다. tf.reduce_prod
: 설정한 축의 요소를 모두 곱한 값을 구한다. tf.reduce_sum
: 설정한 축의 요소를 모두 더한 값을 구한다. 예)
tf.reduce_sum(a, axis=0),
#여기서 마지막에 ,를 붙이는 것은 tuple로 값을 묶어 반환하는 문법이다.
.
.
행렬과 관련된 연산
tf.matmul
: 내적tf.linalg.inv
: 역행렬.
.
크기 및 차원을 바꾸는 명령
tf.reshape
: 벡터 행렬의 크기 변환tf.transpose
: 전치 연산 (행렬의 랭과 열을 바꾸는 연산)tf.expand_dims
: 지정한 축으로 차원을 추가 (쉽게 생각하면 대괄호 하나 더 추가)tf.squeeze
: 벡터로 차원을 축소.
.
텐서를 나누거나 두 개 이상의 텐서를 합치는 명령
tf.slice
: 특정 부분을 추출tf.split
: 분할tf.concat
: 합치기tf.tile
: 복제-붙이기tf.stack
: 합성tf.unstack
: 분리 예)
>>> tf.slice(a, [0, 1], [2, 3]) # (0, 1)위치에서 (2개, 3개)만큼 뽑아낸다.
>>> tf.concat([a1, a2], 1) # 가로축(axis=1)을 따라 a1, a2를 합치기
>>> tf.tile(a1, [1, 3]) # 가로축(axis=1)을 따라 3개로 복사-붙이기
>>> a3 = tf.stack([a1, a2]) # 3x2 행렬 a1, a2를 추가적인 차원으로 붙여서 2x3x2 고차원 텐서 생성
>>> tf.unstack(a3, axis=1) # 2x3x2 고차원 텐서를 0차원으로 풀어서 3개의 2x2 행렬 생성