基于Tensorflow的MNIST手寫數(shù)字識(shí)別分類
本文實(shí)例為大家分享了基于Tensorflow的MNIST手寫數(shù)字識(shí)別分類的具體實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下
代碼如下:
import tensorflow as tf import numpy as np from tensorflow.examples.tutorials.mnist import input_data from tensorflow.contrib.tensorboard.plugins import projector import time IMAGE_PIXELS = 28 hidden_unit = 100 output_nums = 10 learning_rate = 0.001 train_steps = 50000 batch_size = 500 test_data_size = 10000 #日志目錄(這里根據(jù)自己的目錄修改) logdir = 'D:/Develop_Software/Anaconda3/WorkDirectory/summary/mnist' #導(dǎo)入mnist數(shù)據(jù) mnist = input_data.read_data_sets('MNIST_data', one_hot = True) #全局訓(xùn)練步數(shù) global_step = tf.Variable(0, name = 'global_step', trainable = False) with tf.name_scope('input'): #輸入數(shù)據(jù) with tf.name_scope('x'): x = tf.placeholder( dtype = tf.float32, shape = (None, IMAGE_PIXELS * IMAGE_PIXELS)) #收集x圖像的會(huì)總數(shù)據(jù) with tf.name_scope('x_summary'): shaped_image_batch = tf.reshape( tensor = x, shape = (-1, IMAGE_PIXELS, IMAGE_PIXELS, 1), name = 'shaped_image_batch') tf.summary.image(name = 'image_summary', tensor = shaped_image_batch, max_outputs = 10) with tf.name_scope('y_'): y_ = tf.placeholder(dtype = tf.float32, shape = (None, 10)) with tf.name_scope('hidden_layer'): with tf.name_scope('hidden_arg'): #隱層模型參數(shù) with tf.name_scope('hid_w'): hid_w = tf.Variable( tf.truncated_normal(shape = (IMAGE_PIXELS * IMAGE_PIXELS, hidden_unit)), name = 'hidden_w') #添加獲取隱層權(quán)重統(tǒng)計(jì)值匯總數(shù)據(jù)的匯總操作 tf.summary.histogram(name = 'weights', values = hid_w) with tf.name_scope('hid_b'): hid_b = tf.Variable(tf.zeros(shape = (1, hidden_unit), dtype = tf.float32), name = 'hidden_b') #隱層輸出 with tf.name_scope('relu'): hid_out = tf.nn.relu(tf.matmul(x, hid_w) + hid_b) with tf.name_scope('softmax_layer'): with tf.name_scope('softmax_arg'): #softmax層參數(shù) with tf.name_scope('sm_w'): sm_w = tf.Variable( tf.truncated_normal(shape = (hidden_unit, output_nums)), name = 'softmax_w') #添加獲取softmax層權(quán)重統(tǒng)計(jì)值匯總數(shù)據(jù)的匯總操作 tf.summary.histogram(name = 'weights', values = sm_w) with tf.name_scope('sm_b'): sm_b = tf.Variable(tf.zeros(shape = (1, output_nums), dtype = tf.float32), name = 'softmax_b') #softmax層的輸出 with tf.name_scope('softmax'): y = tf.nn.softmax(tf.matmul(hid_out, sm_w) + sm_b) #梯度裁剪,因?yàn)楦怕嗜≈禐閇0, 1]為避免出現(xiàn)無(wú)意義的log(0),故將y值裁剪到[1e-10, 1] y_clip = tf.clip_by_value(y, 1.0e-10, 1 - 1.0e-5) with tf.name_scope('cross_entropy'): #使用交叉熵代價(jià)函數(shù) cross_entropy = -tf.reduce_sum(y_ * tf.log(y_clip) + (1 - y_) * tf.log(1 - y_clip)) #添加獲取交叉熵的匯總操作 tf.summary.scalar(name = 'cross_entropy', tensor = cross_entropy) with tf.name_scope('train'): #若不使用同步訓(xùn)練機(jī)制,使用Adam優(yōu)化器 optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate) #單步訓(xùn)練操作, train_op = optimizer.minimize(cross_entropy, global_step = global_step) #加載測(cè)試數(shù)據(jù) test_image = mnist.test.images test_label = mnist.test.labels test_feed = {x:test_image, y_:test_label} with tf.name_scope('accuracy'): prediction = tf.equal(tf.argmax(input = y, axis = 1), tf.argmax(input = y_, axis = 1)) accuracy = tf.reduce_mean( input_tensor = tf.cast(x = prediction, dtype = tf.float32)) #創(chuàng)建嵌入變量 embedding_var = tf.Variable(test_image, trainable = False, name = 'embedding') saver = tf.train.Saver({'embedding':embedding_var}) #創(chuàng)建元數(shù)據(jù)文件,將MNIST圖像測(cè)試集對(duì)應(yīng)的標(biāo)簽寫入文件 def CreateMedaDataFile(): with open(logdir + '/metadata.tsv', 'w') as f: label = np.nonzero(test_label)[1] for i in range(test_data_size): f.write('%d\n' % label[i]) #創(chuàng)建投影配置參數(shù) def CreateProjectorConfig(): config = projector.ProjectorConfig() embeddings = config.embeddings.add() embeddings.tensor_name = 'embedding:0' embeddings.metadata_path = logdir + '/metadata.tsv' projector.visualize_embeddings(writer, config) #聚集匯總操作 merged = tf.summary.merge_all() #創(chuàng)建會(huì)話的配置參數(shù) sess_config = tf.ConfigProto( allow_soft_placement = True, log_device_placement = False) #創(chuàng)建會(huì)話 with tf.Session(config = sess_config) as sess: #創(chuàng)建FileWriter實(shí)例 writer = tf.summary.FileWriter(logdir = logdir, graph = sess.graph) #初始化全局變量 sess.run(tf.global_variables_initializer()) time_begin = time.time() print('Training begin time: %f' % time_begin) while True: #加載訓(xùn)練批數(shù)據(jù) batch_x, batch_y = mnist.train.next_batch(batch_size) train_feed = {x:batch_x, y_:batch_y} loss, _, summary= sess.run([cross_entropy, train_op, merged], feed_dict = train_feed) step = global_step.eval() #如果step為100的整數(shù)倍 if step % 100 == 0: now = time.time() print('%f: global_step = %d, loss = %f' % ( now, step, loss)) #向事件文件中添加匯總數(shù)據(jù) writer.add_summary(summary = summary, global_step = step) #若大于等于訓(xùn)練總步數(shù),退出訓(xùn)練 if step >= train_steps: break time_end = time.time() print('Training end time: %f' % time_end) print('Training time: %f' % (time_end - time_begin)) #測(cè)試模型精度 test_accuracy = sess.run(accuracy, feed_dict = test_feed) print('accuracy: %f' % test_accuracy) saver.save(sess = sess, save_path = logdir + '/embedding_var.ckpt') CreateMedaDataFile() CreateProjectorConfig() #關(guān)閉FileWriter writer.close()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pytest+request+Allure實(shí)現(xiàn)接口自動(dòng)化框架
接口自動(dòng)化是指模擬程序接口層面的自動(dòng)化,由于接口不易變更,維護(hù)成本更小,所以深受各大公司的喜愛,本文主要介紹了Pytest+request+Allure實(shí)現(xiàn)接口自動(dòng)化框架,感興趣的可以了解一下2021-07-07Python數(shù)據(jù)處理之savetxt()和loadtxt()使用詳解
這篇文章主要介紹了Python數(shù)據(jù)處理之savetxt()和loadtxt()使用詳解,NumPy提供了多種存取數(shù)組內(nèi)容的文件操作函數(shù),保存數(shù)組數(shù)據(jù)的文件可以是二進(jìn)制格式或者文本格式,今天我們來(lái)看看savetxt()和loadtxt()的用法,需要的朋友可以參考下2023-08-08SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解
這篇文章主要介紹了SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解,Spring是分層的JavaSE/EE應(yīng)用輕量級(jí)開源框架,以IoC和AOP為內(nèi)核,提供了展現(xiàn)層 Spring MVC和持久層Spring JDBC以及業(yè)務(wù)層事務(wù)管理等眾多的企業(yè)級(jí)應(yīng)用技術(shù),需要的朋友可以參考下2023-07-07Django項(xiàng)目后臺(tái)不掛斷運(yùn)行的方法
今天小編就為大家分享一篇Django項(xiàng)目后臺(tái)不掛斷運(yùn)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08十個(gè)Python練手的實(shí)戰(zhàn)項(xiàng)目,學(xué)會(huì)這些Python就基本沒(méi)問(wèn)題了(推薦)
這篇文章主要介紹了Python實(shí)戰(zhàn)項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04