딥러닝의 정석 예제 코드 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 알고리즘에 대해

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

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

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기

python ctypes LoadLibrary로 windows dll 로드 및 함수 호출 예제