항상 체크 해야 할 것 !
tf.constant()
※ 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
tf.random.uniform
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")
미지수, 가중치를 정의할 때 사용
직접 사용할 일이 많지는 않음
변수 정의는 변수 생성 + 초기화
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)
print("Shape: ", te_var.shape)
print("DType: ", te_var.dtype)
print("As NumPy: ", te_var.numpy)
a = tf.Variable([2.0, 3.0])
print("First : ", a, "\n")
a.assign([1, 2])
print("Second : ", a, "\n")
아래의 기본 연산은 특수 메서드를 이용하여 연산자 오버로딩이 되어 있으므로 그냥 연산자 기호를 사용하는게 가능!
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
: 분리 💻 출처 : 제로베이스 데이터 취업 스쿨