딥러닝의 정석 예제 코드 chapter 4 경사 하강법을 넘어서
딥러닝의 정석 (Fundamentals of Deep Learning)의 chapter 4 '경사 하강법을 넘어서'에 나온 예제 코드를 빌드가 되도록 약간 수정한
  코드와 실행 결과 화면이다.
  
  
    
      
      
      
      
      
      
      
      
          
          
      
          
              
              
      
      
      
      
  
    
  
  
  
    
  
  
    
  
  
  아래 예제 코드는 본 블로그의 https://ryanclaire.blogspot.com/2020/04/fundamentals-of-deep-learning-chapter-3.html를 먼저 실행한 후 실행해야 한다. 학습된 파라메터를 불러 오차 곡면에 대한 정보를 보여준다. 아래 코드에서는 chapter 3의 예제 코드 이름을
    ch3_multilayer_perceptron_mnist.py로 하였고, mlp_logs에서
    mlp_logs/model-checkpoint-1100.meta로 저장된 파라메터를 사용하였다.
  [소스 코드]
import tensorflow as tf
      import numpy as np
      import time, shutil, os
      import matplotlib.pyplot as plt
      # ch3_multilayer_perceptron_mnist은 ch3의 코드 py 파일이다.
      from ch3_multilayer_perceptron_mnist import inference, loss
      from tensorflow.examples.tutorials.mnist import input_data
      tf.reset_default_graph()
      #tf.set_random_seed(777)
      
        mnist = input_data.read_data_sets("../MNIST_data/",one_hot=True)
      
      sess = tf.Session()
      # 학습된 파라메터들을 불러옴..
      # ch3_multilayer_perceptron_mnist 에서 학습된 파라메터
      
        saver =
        tf.train.import_meta_graph('mlp_logs/model-checkpoint-1100.meta')
      
      saver.restore(sess,'mlp_logs/model-checkpoint-1100')
      
        var_list_opt = [None, None, None, None, None, None, None,None,None,None]
      
      name_2_index = {
       "mlp_model/hidden_1/W:0" : 0,
       "mlp_model/hidden_1/b:0" : 1,
       "mlp_model/hidden_2/W:0" : 2,
       "mlp_model/hidden_2/b:0" : 3,
       "mlp_model/output/W:0" : 4,
       "mlp_model/output/b:0" : 5
      }
      for var in tf.trainable_variables():
       if var.name in name_2_index:
       index = name_2_index[var.name]
       var_list_opt[index] = var
      #초기 랜덤 파라메터
      with tf.variable_scope("mlp_init") as scope:
          x = tf.placeholder(tf.float32,[None, 784])
          y = tf.placeholder(tf.float32,[None, 10])
          dropout_rate = tf.placeholder(tf.float32)
          output_rand = inference(x,dropout_rate)
          cost_rand = loss(output_rand,y)
          scope.reuse_variables()
      
            var_name_list_rand = ["hidden_1/W", "hidden_1/b",
        "hidden_2/W", "hidden_2/b", 
      
      
                           
         "output/W", "output/b"]
      
      
            var_list_rand = [tf.get_variable(v) for v in
        var_name_list_rand]
      
          init_op = tf.variables_initializer(var_list_rand)
          sess.run(init_op)
      with tf.variable_scope("mlp_inter") as scope:
          alpha = tf.placeholder(tf.float32,[1,1])
          prev_layer = x
          for i in range(3):
      
                h_w_inter = var_list_opt[i*2]*(1-alpha) +
        var_list_rand[i*2]*alpha
      
      
                h_b_inter = var_list_opt[i*2+1]*(1-alpha) +
        var_list_rand[i*2+1]*alpha
      
      
                prev_layer =
        tf.nn.relu(tf.matmul(prev_layer,h_w_inter)+h_b_inter)
      
          cost_inter = loss(prev_layer,y)
      
            #tf.summary.scalar("interpolated_cost",cost_inter)
      
      if os.path.exists('liner_interpolation_logs/'):
      
               
        shutil.rmtree('liner_interpolation_logs/',ignore_errors=True)
      
      
        #summary_writer = tf.summary.FileWriter("liner_interpolation_logs/",
        graph_def=sess.graph_def)
      
      #summary_op = tf.summary.merge_all()
      results=[]
      for a in np.arange(-3,3,0.01):
          feed_dict={
                  x: mnist.test.images,
                  y: mnist.test.labels,
                  alpha: [[a]],
                  }
          cost = sess.run(cost_inter,feed_dict=feed_dict)
      
            #cost,summary_str = sess.run([cost_inter,
        summary_op],feed_dict=feed_dict)
      
      
            #summary_writer.add_summary(summary_str,(a+2)/0.01)
      
          results.append(cost)
      plt.plot(np.arange(-3,3,0.01),results,'ro')
      plt.ylabel('Incurred Error')
      plt.xlabel('Alpha')
      plt.show()
  
    [실행 결과]
   
 
 
댓글
댓글 쓰기