• 머신런닝 기초

    2017. 6. 27. 23:00

    by. 위지원

    엣지있게 설명한 텐써플로우 -Sam Abrahams 외 3명 정기철 엮 를 보고 공부한내용


    지도 학습이란 예제 샘플에 대한 실제,기대 결과 값을 가지고 추론 모델을 학습 시키는 것


    계산 그래프의 반복적인 학습과정 순서


    1.모델 파라미터 초기화 : 대부분 랜덤 값을 사용하는데, 단순 모델은 0으로 초기화 

    2.학습데이터와 원하는 출력 값을 읽어들임 : 데이터읫서를 랜덤하게 바꾸어서 모델에 입력되는 데이터의 순서를 달리함

    3.추론 모델 실행 , 입력에 대한 출력 계산

    4.손실 값 계산

    5.모델 파라미터 조절 

    -여기에서 실제적인 학습이 수행

    -손실 값을 최소화하기 위해 파라미터 수정할때 일반적으로 기울기 하강 알고리즘 사용


    위의 과정은 학습률,모델,입력데이터에 따라서 여러번 반복 수행됨

    학습 후에는 다른 데이터에 대해서 추론 모델을 실행해보는 평가 단계를 실행 함 (보통 data비율을 train 70% evaluation 30%)

    import tensorflow as tf def inference(x): #추론모델 계산 def loss(x,y): #손실함수 계산 def inputs(): #입력 데이터를 읽음 def train(total_loss): #모델 파라미터 갱신 def evaluate(sess,x,y): # 여기서 sess는 텐써의 세션 ''' 텐서는 실제로 tensorflow.Session()으로 세션을 생성하기전까지 아무것도 안하고 세션을 생성해야 그제서야 라이브러리와 상호작용하며 session.run을 통해 코드를 실!제!로 수행해서 결과를 알 수 있음 ''' #평가 with tf.Session() as sess: tf.initialize_all_variables().run() #모든 변수 초기화 x,y=input() total_loss = loss(X,Y) train_op=train(total_loss) coord = tf.traing.Coordinator() ''' input data를 모델에 넣는것을 피딩이라 하는데 피딩할때는 메모리상에 리스트형태로 데이터가 존재해서 이를 하나씩 접근해서 넣어야해서 메모리에 전체 데이터가 적재 되어있어야함 이는 대용량 데이터에서는 좋지 않기때문에 텐써플로우 큐를 사용하여 파일에서 읽고 순차적으로 바로 모델에 데이터를 넣는데 이때 넣는걸 실제로 하는 녀석을 큐 러너라함 큐러너는 멀티쓰레드로 동작해서 관리를 해줘야하는데 이때 관리해주는 녀석이 coordinator()로 생성되는 객체 ''' threads = tf.traing.start_queue_runners(sess=sess,coord=coord) #실제 트레이닝 training_strps=1000 for step in range(training_steps): sess.run([train_op]) if step %10 ==0: print("loss:",sess.run([total_loss]) evaluate(sess,X,Y) coord.request_stop() coord.join(threads) ses..close()


    학습 체크 포인트 저장


    학습데이터를 잃지 않기 위해 tf.traing.Saver를 통해 binary file로 저장할 수 있음

    saver=tf.train.Saver() #객체 생성
    #위의 코드와 동일
    if step %1000 ==0:
      saver.save(sess,'my-model',global_step=step) # my-model-1000,my-model-2000이런식으로 저장
    
    ...
    saver.save(sess,'my-model',global_step=training_steps)
    sess.close()
    #닫기전에도 저장
    
    #saver default save file numer=5
    


    특정 포인트를 다시 불러오려면

    1. tf.traing.get_checkpoint_state()메서드를 이용해서 저장된 체크포인트가 있는지 검증함

    (Ex.tf.traing.get_checkpoint_state(os.path.dirname(__file__)))

    2.tf.traing.Saver.restore()메서드를 이용해서 변수값을 복구함


    with tf.Session as sess:
      initial_step=0
      ckpt=tf.traing.get_checkpoint_state(os.path.dirname(__file__))
      if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess,ckpt.model_checkpoint_path)
        initial_step = int(ckpt.model_checkpoint_path.rsplit('-',1)[1])  
    



    '2017년 > machine learning' 카테고리의 다른 글

    머신런닝에관해 좋은글  (0) 2017.08.21
    텐서플로우 선형회귀에 대해 알아보자  (0) 2017.08.16
    tensorflow csv file 불러오기  (0) 2017.08.07
    텐써플로우 큐  (0) 2017.08.01
    선형 회귀 분석  (0) 2017.06.23

    대화의 장 💬