模型的保存与恢复

# -*- coding: utf-8 -*-

"""

Created on Sun Jun 4 10:29:48 2017

# tf.add_to_collection('name', y) 和 tf.get_collection('name')  加载模型的时候可以通过此方法获取网络中一些值。

@author: Administrator

 

[tensor.name for tensor in graph.as_graph_def().node] 加载模型后能够加载所有的tensor名称,通过这个名称可以利用

graph.get_tensor_by_name("name:0") 得到所需的tensor

 

graph = tf.get_default_graph()

list_of_tuples = [op.values() for op in graph.get_operations()]

得到所有的operations

"""

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=False)

 

def model_save():

x = tf.placeholder(tf.float32, [None, 784],name='x')

y_=tf.placeholder(tf.int32,[None,],name='y_')

 

dense1 = tf.layers.dense(inputs=x,

units=1024,

activation=tf.nn.relu,

kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),

kernel_regularizer=tf.nn.l2_loss)

dense2= tf.layers.dense(inputs=dense1,

units=512,

activation=tf.nn.relu,

kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),

kernel_regularizer=tf.nn.l2_loss)

logits= tf.layers.dense(inputs=dense2,

units=10,

activation=None,

kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),

kernel_regularizer=tf.nn.l2_loss

,name='logits')

 

loss=tf.losses.sparse_softmax_cross_entropy(labels=y_,logits=logits)

train_op=tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

correct_prediction = tf.equal(tf.cast(tf.argmax(logits,1),tf.int32), y_)

acc= tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

 

sess=tf.InteractiveSession()

sess.run(tf.global_variables_initializer())

 

saver=tf.train.Saver(max_to_keep=3)

 

#训练阶段

max_acc=0

f=open('ckpt/acc.txt','w')

for i in range(10):

batch_xs, batch_ys = mnist.train.next_batch(100)

sess.run(train_op, feed_dict={x: batch_xs, y_: batch_ys})

val_loss,val_acc=sess.run([loss,acc], feed_dict={x: mnist.test.images, y_: mnist.test.labels})

print('epoch:%d, val_loss:%f, val_acc:%f'%(i,val_loss,val_acc))

f.write(str(i+1)+', val_acc: '+str(val_acc)+'\n')

if val_acc>max_acc:

max_acc=val_acc

saver.save(sess,'ckpt/mnist.ckpt',global_step=i+1)

f.close()

sess.close()

#验证阶段

def restore():

with tf.Session() as sess:

saver = tf.train.import_meta_graph("./ckpt/mnist.ckpt-8.meta")

model_file=tf.train.latest_checkpoint('ckpt/')

saver.restore(sess,model_file)

graph = tf.get_default_graph()

acc = graph.get_tensor_by_name('logits/kernel/Assign_1:0')

# 这个通过 list_of_tuples = [op.values() for op in graph.get_operations()] 得到所有内容

# acc = graph.graph.get_operation_by_name("acc")

logits=sess.run(acc, feed_dict={'x:0': mnist.test.images, 'y_:0': mnist.test.labels})

print('val_loss:%f'%logits)

 

if __name__ == "__main__":

model_save()

restore()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值