-
TensorFlow 기초 5 - 사칙연산, 관계연산, 논리연산, 차원 축소, 차원 확대, one-hot, argmaxTensorFlow 2022. 11. 28. 17:37
# 연산자와 기본 함수 경험 import tensorflow as tf import numpy as np x = tf.constant(7) y = tf.constant(3) print(x + y) print(tf.add(x, y)) print(tf.cond(x > y, lambda:tf.add(x, y), lambda:tf.subtract(x, y))) f1 = lambda:tf.constant(123) f2 = lambda:tf.constant(456) print(tf.case([(tf.greater(x, y), f1)], default=f2).numpy()) # tf.less if(x > y) return 123 else return 456 print('관계 연산') print(tf.equal(1, 2).numpy()) print(tf.not_equal(1, 2).numpy()) print(tf.greater(1, 2).numpy()) print(tf.greater_equal(1, 2).numpy()) print(tf.less(1, 2).numpy()) print('논리 연산') print(tf.logical_and(True, False).numpy()) print(tf.logical_or(True, False).numpy()) print(tf.logical_not(True).numpy()) kbs = tf.constant([1, 2, 2, 2, 3]) val, idx = tf.unique(kbs) print(val.numpy()) # unique print(idx.numpy()) # index print() # tf.reduce~ : 차원 축소 ar = [[1,2],[3,4]] print(tf.reduce_mean(ar).numpy()) # 전체 평균 print(tf.reduce_mean(ar, axis=0).numpy()) # 열 평균 print(tf.reduce_mean(ar, axis=1).numpy()) # 행 평균 t = np.array([[[0,1,2],[3,4,5],[6,7,8],[9,10,11]]]) print(t.shape) print(tf.reshape(t, shape=[2, 6])) # 2행 6열 차원 변경 print(tf.reshape(t, shape=[-1, 6])) # 6열으로 지정해놨기 때문에 자동으로 변경 print(tf.reshape(t, shape=[2, -1])) # 2행으로 지정해놨기 때문에 자동으로 변경 # 차원 축소 aa = np.array([[1],[2],[3],[4]]) print(aa.shape) print(aa) bb = tf.squeeze(aa) # 열의 갯수가 1인 경우에만 차원이 축소된다. print(bb.shape) print(bb) aa2 = np.array([[[1],[2]],[[3],[4]]]) print(aa2.shape) print(aa2) bb2 = tf.squeeze(aa2) print(bb2.shape) print(bb2) print() print(t.shape) t2 = tf.squeeze(t) # 열 요소가 한 개일 때만 차원 축소 print(t2.shape) print(t2) print() # 차원 확대 tarr = tf.constant([[1,2,3],[4,5,6]]) print(tf.shape(tarr)) print() sbs = tf.expand_dims(tarr, 0) # 첫번째 차원을 추가해 확장 print(sbs, tf.shape(sbs).numpy()) print() sbs2 = tf.expand_dims(tarr, 1) # 두번째 차원을 추가해 확장 print(sbs2, tf.shape(sbs2).numpy()) print() sbs3 = tf.expand_dims(tarr, 2) # 세번째 차원을 추가해 확장 print(sbs3, tf.shape(sbs3).numpy()) print() sbs4 = tf.expand_dims(tarr, -1) # 마지막 번째 차원을 추가해 확장 print(sbs4, tf.shape(sbs4).numpy()) print('one-hot, argmax') print(tf.one_hot([0,1,2,3],depth=4)) # depth는 열 갯수 지정 print(tf.argmax(tf.one_hot([0,1,2,3],depth=4)).numpy()) <console> tf.Tensor(10, shape=(), dtype=int32) tf.Tensor(10, shape=(), dtype=int32) tf.Tensor(10, shape=(), dtype=int32) 123 관계 연산 False True False False True 논리 연산 False True False [1 2 3] [0 1 1 1 2] 2 [2 3] [1 3] (1, 4, 3) tf.Tensor( [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]], shape=(2, 6), dtype=int32) tf.Tensor( [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]], shape=(2, 6), dtype=int32) tf.Tensor( [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]], shape=(2, 6), dtype=int32) (4, 1) [[1] [2] [3] [4]] (4,) tf.Tensor([1 2 3 4], shape=(4,), dtype=int32) (2, 2, 1) [[[1] [2]] [[3] [4]]] (2, 2) tf.Tensor( [[1 2] [3 4]], shape=(2, 2), dtype=int32) (1, 4, 3) (4, 3) tf.Tensor( [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]], shape=(4, 3), dtype=int32) tf.Tensor([2 3], shape=(2,), dtype=int32) tf.Tensor( [[[1 2 3] [4 5 6]]], shape=(1, 2, 3), dtype=int32) [1 2 3] tf.Tensor( [[[1 2 3]] [[4 5 6]]], shape=(2, 1, 3), dtype=int32) [2 1 3] tf.Tensor( [[[1] [2] [3]] [[4] [5] [6]]], shape=(2, 3, 1), dtype=int32) [2 3 1] tf.Tensor( [[[1] [2] [3]] [[4] [5] [6]]], shape=(2, 3, 1), dtype=int32) [2 3 1] one-hot, argmax tf.Tensor( [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]], shape=(4, 4), dtype=float32) [0 1 2 3]
차원 축소
squeeze() = 열 요소가 한 개일 때만 차원 축소
reduce~ = 행, 열을 선언하면 그에 맞게 차원 축소
faltten() = 차원 축소
차원 확대
expand_dims(x, 0) 숫자에 따라 인덱스에 차원을 추가해 확장
one-hot(원핫)인코딩이란?
단 하나의 값만 True이고 나머지는 모두 False인 인코딩을 말한다.
'TensorFlow' 카테고리의 다른 글
TensorFlow 기초 7 - Keras XOR(복수의 뉴런(노드)를 사용) (0) 2022.11.29 TensorFlow 기초 6 - Keras 모델 기본 개념, 케라스 모델링 순서 (0) 2022.11.29 TensorFlow 기초 4 - 사칙연산, tf.constant(), tf.Variable(), autograph 기능 (0) 2022.11.28 TensorFlow 기초 3 - TF의 구조 (Graph로 설계된 내용은 Session에 실행) (0) 2022.11.28 TensorFlow 기초 2 - 변수, 값 치환, 누적(+=) (0) 2022.11.28