神剑山庄资源网 Design By www.hcban.com
本文实例为大家分享了基于Tensorflow的MNIST手写数字识别分类的具体实现代码,供大家参考,具体内容如下
代码如下:
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 #日志目录(这里根据自己的目录修改) logdir = 'D:/Develop_Software/Anaconda3/WorkDirectory/summary/mnist' #导入mnist数据 mnist = input_data.read_data_sets('MNIST_data', one_hot = True) #全局训练步数 global_step = tf.Variable(0, name = 'global_step', trainable = False) with tf.name_scope('input'): #输入数据 with tf.name_scope('x'): x = tf.placeholder( dtype = tf.float32, shape = (None, IMAGE_PIXELS * IMAGE_PIXELS)) #收集x图像的会总数据 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'): #隐层模型参数 with tf.name_scope('hid_w'): hid_w = tf.Variable( tf.truncated_normal(shape = (IMAGE_PIXELS * IMAGE_PIXELS, hidden_unit)), name = 'hidden_w') #添加获取隐层权重统计值汇总数据的汇总操作 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层参数 with tf.name_scope('sm_w'): sm_w = tf.Variable( tf.truncated_normal(shape = (hidden_unit, output_nums)), name = 'softmax_w') #添加获取softmax层权重统计值汇总数据的汇总操作 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) #梯度裁剪,因为概率取值为[0, 1]为避免出现无意义的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'): #使用交叉熵代价函数 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'): #若不使用同步训练机制,使用Adam优化器 optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate) #单步训练操作, train_op = optimizer.minimize(cross_entropy, global_step = global_step) #加载测试数据 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)) #创建嵌入变量 embedding_var = tf.Variable(test_image, trainable = False, name = 'embedding') saver = tf.train.Saver({'embedding':embedding_var}) #创建元数据文件,将MNIST图像测试集对应的标签写入文件 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]) #创建投影配置参数 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() #创建会话的配置参数 sess_config = tf.ConfigProto( allow_soft_placement = True, log_device_placement = False) #创建会话 with tf.Session(config = sess_config) as sess: #创建FileWriter实例 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: #加载训练批数据 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的整数倍 if step % 100 == 0: now = time.time() print('%f: global_step = %d, loss = %f' % ( now, step, loss)) #向事件文件中添加汇总数据 writer.add_summary(summary = summary, global_step = step) #若大于等于训练总步数,退出训练 if step >= train_steps: break time_end = time.time() print('Training end time: %f' % time_end) print('Training time: %f' % (time_end - time_begin)) #测试模型精度 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() #关闭FileWriter writer.close()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
神剑山庄资源网 Design By www.hcban.com
神剑山庄资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
神剑山庄资源网 Design By www.hcban.com
暂无基于Tensorflow的MNIST手写数字识别分类的评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月17日
2024年11月17日
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】