딥러닝의 정석 예제 코드 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()

[실행 결과]



댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

리눅스 디바이스 드라이버 기초와 예제

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법