ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TensorFlow 기초 5 - 사칙연산, 관계연산, 논리연산, 차원 축소, 차원 확대, one-hot, argmax
    TensorFlow 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인 인코딩을 말한다.

     

     

    댓글

Designed by Tistory.