스터디노트 (Tensorflow 1)

zoe·2023년 7월 7일
0

항상 체크 해야 할 것 !

  • shape
  • dtype (데이터 타입이 같아야 연산이 가능합니다.)

Constant (상수)

  • tf.constant()

    • list -> Tensor
    • tuple -> Tensor
    • Array -> Tensor

※ double precision : 64bits
※ single precision : 32bits
※ half precision : 16bits

  • 데이터 타입 컨트롤하는 방법

    • tf.cast
  • 특정 값의 Tensor 생성

  • tf.ones

  • tf.zeros

  • tf.range

  • Random Value(난수)
    - 무작위 값을 생성할 때 필요.
    - Noise를 재현 한다거나, test를 한다거나 할 때 많이 사용됨
    - 데이터 타입은 상수형태로 반환됨

  • tf.random 에 구현 되어 있음.

    • tf.random.normal
      • Gaussian Normal Distribution
    • tf.random.uniform
      • Uniform Distribution
  • Random seed 관리 하기!!!
    - Random value로 보통 가중치를 초기화
    - 이외에도 학습과정에서 Random value가 많이 사용됨.
    - 이를 관리 안해주면, 자신이 했던 작업이 동일하게 복구 또는 재현이 안됨!!!

  • tf.random.set_seed({seed_number})
    => 항상 Random seed를 고정해두고 개발 한다!!!
    (주의 할 점은 해당 개발물에 사용되는 난수가 모두 TensorFlow에서 생성된것이 아닐 수 있다는 것이다.)

tf.random.set_seed(seed)
a = tf.random.uniform([1])
b = tf.random.uniform([1])
print(a, b, sep="\n")




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)
  • Constant와 같이 기본 속성값이 들어있음.
print("Shape: ", te_var.shape)
print("DType: ", te_var.dtype)
print("As NumPy: ", te_var.numpy)
  • 변수는 기존 텐서의 메모리를 재사용하여 텐서를 재할당 할 수 있다.
    - assign
a = tf.Variable([2.0, 3.0])
print("First : ", a, "\n")

a.assign([1, 2]) 
print("Second : ", a, "\n")




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.matmul: 내적
  • tf.linalg.inv: 역행렬

크기 및 차원을 바꾸는 명령
(잘 사용됩니다!!)

이를 사용 할 때는 축을 잘 이해하고 사용하시면 좋습니다.

  • tf.reshape: 벡터 행렬의 크기 변환
  • tf.transpose: 전치 연산
  • tf.expand_dims: 지정한 축으로 차원을 추가
  • tf.squeeze: 벡터로 차원을 축소
a = tf.range(6, dtype=tf.int32)      # [0, 1, 2, 3, 4, 5]
print("a     :", a, "\n")
a_2d = tf.reshape(a, (2, 3))  # 1차원 벡터는 2x3 크기의 2차원 행렬로 변환
print("a_2d  :", a_2d, "\n")
a_2d_t = tf.transpose(a_2d)   # 2x3 크기의 2차원 행렬을 3x2 크기의 2차원 행렬로 변환
print("a_2d_t:", a_2d_t, "\n")
a_3d = tf.expand_dims(a_2d, 0) # 2x3 크기의 2차원 행렬을 1x2x3 크기의 3차원 행렬로 변환
print("a_3d  :", a_3d, "\n")
a_4d = tf.expand_dims(a_3d, 3) # 1x2x3 크기의 3차원 행렬을 1x2x3x1 크기의 4차원 행렬로 변환
print("a_4d  :", a_4d, "\n")
a_1d = tf.squeeze(a_4d)
print("a_1d  :", a_1d, "\n")   # 1x2x3x1 크기의 4차원 행렬을 1차원 벡터로 변환

텐서를 나누거나 두 개 이상의 텐서를 합치는 명령

  • tf.slice: 특정 부분을 추출
  • tf.split: 분할
  • tf.concat: 합치기
  • tf.tile: 복제-붙이기
  • tf.stack: 합성
  • tf.unstack: 분리

💻 출처 : 제로베이스 데이터 취업 스쿨

profile
#데이터분석 #퍼포먼스마케팅 #데이터 #디지털마케팅

0개의 댓글