YongWook's Notes

Tensorflow Machine Learning Cookbook 정리 본문

-software/AI

Tensorflow Machine Learning Cookbook 정리

글로벌한량 2017. 9. 26. 20:02

본 포스팅은 Tensorflow Machine Learning Cookbook 교재로 공부한 내용을 재구성하였음을 미리 밝힙니다.

  1. 텐서플로우 동작 방식

    시작
    -> 데이터셋 가져오기 또는 생성하기
    -> 데이터 변환 및 정규화
    -> 데이터셋을 학습셋, 테스트셋, 검증셋으로 분할
    -> 알고리즘 매개변수 설정
    -> 변수 및 플레이스홀더 초기화
    -> 모델구조 정의
    -> Loss Function 선언
    -> 모델 초기화 및 학습
    -> 모델 평가
    -> Hyperparameter 조정
    -> 적용 및 새로운 결과 예측
    ->

  2. 텐서 정의
    1. 고정텐서
      - 0값으로 채워진 텐서 : zero_tsr = tf.zeros([row_dim, col_dim])
      - 1값으로 채워진 텐서 : ones_tsr = tf.ones([row_dim, col_dim])
      - 동일한 상수로 채워진 텐서 : filled_tsr = tf.fill([row_dim, col_dim], 42) #42값으로 채움
      - 기존 상수를 이용할 때 : constant_tsr = tf.constant([1, 2, 3]) - useless

    2. 형태가 비슷한 텐서
      -기존의 형태를 바탕으로 텐서 변수를 초기화 하는방법

                zeros_similar = tf.zeros_like(constant_tsr)
                ones_similar = tf.ones_like(constant_tsr)
              

    3. 순열 텐서
      - 구간을 지정하는 방식으로 텐서 선언

                # result : [0.0, 0.5, 1.0] <- start와 stop값에 float만 들어감
                linear_tsr = tf.linspace(start=0.0, stop=1.0, num=3)
                # result : [6, 9, 12] <- integer값 가능
                integer_seq_tsr = tf.range(start=6, limit=15, delta=3) 

    4. 랜덤 텐서 - Uniform distribution

                  randunif_tsr = tf.random_uniform([row_dom, col_dim], minval=0, maxval=1) #minval <= x < maxv
                
      - Normal distribution
                  random_str = tf.random_normal([row_dim, col_dim], mean=0.0, stddev=1.0)
                  #특정 범위에 속하는 정규 분포 임의의 값을 생성하고 싶을 때
                  runcnorm_tsr = tf.truncated_normal([row_dim, col_dim], mean=0.0, stddev=1.0
                
      -배열 섞을 때
                    shuffled_output = tf.random_suffle(input_tensor)
                    cropped_output = tf.random_crop(input_tensor, crop_size)
                  

    5. numpy배열을 tensor로
      -convert_to_tensor()를 이용하자.

  3. Place Holder 및 Variable사용

    어떠한 데이터가 placeholder에 해당하는지 variable에 해당하는지 파악하는 것이 중요하다. variable은 알고리즘에 속한 매개변수. placeholder는 특정 타입과 형태의 데이터를 투입하게 될 객체.

    1. Variable 생성 및 사용 예제

                    my_var = tf.Variable(tf.zeros([2,3]))
                    sess = tf.Session()
                    initialize_op = tf.global_variables_initializer()
                    sess.run(initialize_op)
                  

    2. -Placeholder 생성 및 사용 예제

      sess = tf.Session()
                    x = tf.placeholder(tf.float32, shape=[2,2])
                    y = tf.identity(x)
                    x_vals = np.random.rand(2,2)
                    sess.run(y, feed_dict={x: x_vals})
                  

    3. -다른 변수의 초기화 결과를 이용하기

      sess = tf.Session()
                    first_var = tf.Variable(tf.zeros([2,3]))
                    sess.run(first_var.initializer)
                    second_var = tf.Variabel(tf.zeros_like(first_var))
                    sess.run(second_var.initializer)
                  

  4. 행렬 다루기

    행렬 연산은 매우 중요하다. Tensorflow에서는 numpy배열 뿐만 아니라 diag() 함수 등 여러가지 기능을 제공한다.



    identity_matrix = tf.diag([1.0, 1.0, 1.0])
                A = tf.truncated_normal([2, 3])
                B = tf.fill([2, 3], 5.0)
                C = tf.random_uniform([3, 2])
                D = tf.convert_to_tensor(np.array([[1., 2., 3.], [-3., -7., -1.], [0., 5., -2.]]))  
              




                #곱하기
                print(sess.run(tf.matmul(B, identity_matrix)))
                #행렬 인자 전치
                print(sess.run(tf.transpose(C)))
                #행렬식(determinant) 구하기
                print(sess.run(tf.matrix_determinant(D)))
                #역행렬 구하기
                print(sess.run(tf.matrix_inverse(D)))
                #숄레스키 분해
                print(sess.run(tf.cholesky(identity_matrix)))
                #행렬 고윳값 & 고유 벡터
                print(sess.run(tf.self_adjoint_eig(D)))
              



Comments