딥러닝의 정석 예제 코드 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()
[실행 결과]
댓글
댓글 쓰기