0

나는 모델을 저장하고 복원하는 방법을 보여주는 this question을 Stackoverflow에서 보았습니다.Tensorflow - 모델 저장 및 복원

import numpy as np 
import matplotlib.pyplot as plt 
import cifar_tools 
import tensorflow as tf 

data, labels = cifar_tools.read_data('C:\\Users\\abc\\Desktop\\Testing') 

x = tf.placeholder(tf.float32, [None, 150 * 150]) 
y = tf.placeholder(tf.float32, [None, 2]) 

w1 = tf.Variable(tf.random_normal([5, 5, 1, 64])) 
b1 = tf.Variable(tf.random_normal([64])) 

w2 = tf.Variable(tf.random_normal([5, 5, 64, 64])) 
b2 = tf.Variable(tf.random_normal([64])) 

w3 = tf.Variable(tf.random_normal([38*38*64, 1024])) 
b3 = tf.Variable(tf.random_normal([1024])) 

w_out = tf.Variable(tf.random_normal([1024, 2])) 
b_out = tf.Variable(tf.random_normal([2])) 

def conv_layer(x,w,b): 
    conv = tf.nn.conv2d(x,w,strides=[1,1,1,1], padding = 'SAME') 
    conv_with_b = tf.nn.bias_add(conv,b) 
    conv_out = tf.nn.relu(conv_with_b) 
    return conv_out 

def maxpool_layer(conv,k=2): 
    return tf.nn.max_pool(conv, ksize=[1,k,k,1], strides=[1,k,k,1], padding='SAME') 

def model(): 
    x_reshaped = tf.reshape(x, shape=[-1, 150, 150, 1]) 

    conv_out1 = conv_layer(x_reshaped, w1, b1) 
    maxpool_out1 = maxpool_layer(conv_out1) 
    norm1 = tf.nn.lrn(maxpool_out1, 4, bias=1.0, alpha=0.001/9.0, beta=0.75) 
    conv_out2 = conv_layer(norm1, w2, b2) 
    norm2 = tf.nn.lrn(conv_out2, 4, bias=1.0, alpha=0.001/9.0, beta=0.75) 
    maxpool_out2 = maxpool_layer(norm2) 

    maxpool_reshaped = tf.reshape(maxpool_out2, [-1, w3.get_shape().as_list()[0]]) 
    local = tf.add(tf.matmul(maxpool_reshaped, w3), b3) 
    local_out = tf.nn.relu(local) 

    out = tf.add(tf.matmul(local_out, w_out), b_out) 
    return out 

model_op = model() 

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(model_op, y)) 
train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost) 

correct_pred = tf.equal(tf.argmax(model_op, 1), tf.argmax(y,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32)) 

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    onehot_labels = tf.one_hot(labels, 2, on_value=1.,off_value=0.,axis=-1) 
    onehot_vals = sess.run(onehot_labels) 
    batch_size = 1 
    for j in range(0, 5): 
     print('EPOCH', j) 
     for i in range(0, len(data), batch_size): 
      batch_data = data[i:i+batch_size, :] 
      batch_onehot_vals = onehot_vals[i:i+batch_size, :] 
      _, accuracy_val = sess.run([train_op, accuracy], feed_dict={x: batch_data, y: batch_onehot_vals}) 
      print(i, accuracy_val) 

     print('DONE WITH EPOCH') 

감사 : 내가 아래에있는 내 코드에서 그렇게 할 수있는 방법을 내가 내 코드와 통합하는 방법을 잘 모르겠어요으로

내 질문이다.

답변

0

다음은 이전에 복원을 위해 사용한 몇 가지 샘플 코드입니다. 이 작업은 세션을 만든 후에 수행해야하지만 모델을 실행하기 전에 수행해야합니다.

saver = tf.train.Saver() 

ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) 
if ckpt and ckpt.model_checkpoint_path: 
    saver.restore(sess, ckpt.model_checkpoint_path) 
    print(ckpt.model_checkpoint_path) 
    i_stopped = int(ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]) 
else: 
    print('No checkpoint file found!') 
    i_stopped = 0 

, 저장

, 1,000 배치, 또는 경우에 당신은 모든 시대 절약 할 수있다 :

if i % 1000 == 0: 
    checkpoint_path = os.path.join(FLAGS.checkpoint_dir, 'model.ckpt') 
    saver.save(sess, checkpoint_path, global_step=i) 

그것은 당신의 코드에이 구현은 매우 간단해야합니다. 모델이 저장 될 체크 포인트 디렉토리를 정의해야한다는 것을 기억하십시오.

희망이 도움이됩니다.

+0

친절한 답변을 보내 주셔서 감사합니다. 코드를 실행하려고 할 때 : Traceback (가장 최근의 마지막 호출) : 파일 "cnn.py", 줄 63, ckpt = tf.train.get_checkpoint_state (FLAGS.checkpoint_dir) NameError : name 'FLAGS'가 정의되지 않았습니다. – Simplicity

+0

예, 'FLAGS.checkpoint_dir'은 원하는 것일 수 있습니다. 내가 명시 적으로 경로를 정의하는 것이 좋습니다 :'ckpt_path =/path/to/ckpts /'당신이 체크 포인트를 저장하고 싶다면'FLAGS.checkpoint_dir' 대신'ckpt_path'를 사용하십시오. 그 외에도 모든 것이 잘되어야합니다. –