# -*- 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()