tensorflow | 기초 문법

소리·2024년 1월 7일
0

Tensfor 데이터를 생성할 때 항상 체크해야 하는 것

  • shape
  • dtype

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 변수

  • 미지수, 가중치를 정의할 때 사용하며, 변수 생성 + 초기화를 의미한다.
  • constant와 같이 기본 속성 값이 들어있다.
예)
>>> 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 행렬 생성

profile
데이터로 경로를 탐색합니다.

0개의 댓글