首先,使用lenet-5框架:
[python]
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- Created on Thu May 24 10:12:33 2018
- @author: john
- """
- ########Training a DNN Using Plain TensorFlow
- ####Construction Phase
- ##define parameter
- import tensorflow as tf
- import numpy as np
- import matplotlib.pyplot as plt
- import pandas as pd
- import tensorflow.contrib.slim as slim
- #load the data
- train=pd.read_csv('train.csv')
- y=train['label'].values
- del train['label']
- data=train.values
- data=np.reshape(data,(data.shape[0],28,28,1))
- from sklearn.cross_validation import train_test_split
- X_train,X_test,y_train,y_test=train_test_split(data,y,test_size=0.2)
- ########construct phase
- X=tf.placeholder(tf.float32,shape=(None,28,28,1))
- y=tf.placeholder(tf.int32,shape=(None))
- ##net struct
- conv1=slim.conv2d(X,6,[5,5],stride=1,padding='SAME',activation_fn=tf.nn.tanh,scope='conv1')
- avg_pool1=slim.avg_pool2d(conv1,[2,2],[2,2],padding='SAME')
- conv2=slim.conv2d(avg_pool1,16,[5,5],stride=1,padding='SAME',activation_fn=tf.nn.tanh,scope='conv2')
- avg_pool2=slim.avg_pool2d(conv2,[2,2],[2,2],padding='SAME')
- conv3=slim.conv2d(avg_pool2,120,[5,5],stride=1,padding='SAME',activation_fn=tf.nn.tanh,scope='conv3')
- flatten=slim.flatten(conv3)
- f1=slim.fully_connected(flatten,84,activation_fn=tf.nn.tanh,scope='f1')
- logits=slim.fully_connected(f1,10,activation_fn=None,scope='f2')
- ##loss
- xentropy=tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y,logits=logits)
- loss=tf.reduce_mean(xentropy,name='loss')
- ##train
- learning_rate=0.01
- optimizer=tf.train.GradientDescentOptimizer(learning_rate)
- training_op=optimizer.minimize(loss)
- ##eval
- correct=tf.nn.in_top_k(logits,y,1)
- accuracy=tf.reduce_mean(tf.cast(correct,tf.float32))
- init=tf.global_variables_initializer()
- saver=tf.train.Saver()
- ########execution phase
- n_input=28*28
- n_epochs=10
- batch_size=125
- def fetch_batch(epoch,batch_index,batch_size):
- np.random.seed(epoch*n_input+batch_index)
- indicies=np.random.randint(X_train.shape[0],size=batch_size)
- X_batch=X_train[indicies]
- y_batch=y_train[indicies]
- return X_batch,y_batch
- with tf.Session() as sess:
- init.run()
- for epoch in range(n_epochs):
- for batch_index in range(X_train.shape[0]//batch_size):
- X_batch,y_batch=fetch_batch(epoch,batch_index,batch_size)
- sess.run(training_op,feed_dict={X:X_batch,y:y_batch})
- acc_train=accuracy.eval(feed_dict={X:X_train,y:y_train})
- acc_test=accuracy.eval(feed_dict={X:X_test,y:y_test})
- print(epoch,' train accuracy:',acc_train,
- ' test accuracy:',acc_test)
- save_path=saver.save(sess,'./my_model.ckpt')
部分结果如下所示:
[python]
- 0 train accuracy: 0.916042 test accuracy: 0.915357
- 1 train accuracy: 0.940149 test accuracy: 0.937024
- 2 train accuracy: 0.951369 test accuracy: 0.946786
- 3 train accuracy: 0.956756 test accuracy: 0.954167
- 4 train accuracy: 0.96131 test accuracy: 0.958809
- 5 train accuracy: 0.965952 test accuracy: 0.965
- 6 train accuracy: 0.967351 test accuracy: 0.964405
- 7 train accuracy: 0.968869 test accuracy: 0.967262
- 8 train accuracy: 0.972321 test accuracy: 0.969643
登录 | 立即注册