学习中国大学MOOC-人工智能实践:Tensorflow笔记课程时的个人笔记记录。具体课程情况可以点击链接查看。(这里推一波中国大学MOOC,很好的学习平台,质量高,种类全,想要学习的话很有用的)**
本篇是第五章的学习笔记,第四章的可以点击我阅读.
前三章的可以点击我阅读.

Chapter 5 全连接网络基础

5.1 MNIST 数据集

MNIST数据集:
6W张28*28的0~9手写数字图片和标签,用于训练
1W张28*28的0~9手写数字图片和标签,用于测试
每张图片的784个像素点(28*28)组成长度为784的一维数组,作为输入特征
图片的标签以一维数组的形式给出,每个元素表示对应分类出现的概率
TF 提供 input_data 模块自动读取数据集

from tensorflow.examples.tutorials.minist import input_data
minist = input_data.read_data_set('./data/', one_hot=True)

返回各子集样本数

mnist.train.num_examples    #返回训练集样本数
mnist.validation.num_examples #返回验证集样本数
mnist.test.num_examples #返回测试集样本数

返回标签和数据

mnist.train.labels[0]   #返回标签
mnist.train.images[0]   #返回数据

取一小撮数据,准备喂入神经网络

BATCH_SIZE = 200    #定义batch size
xs, ys = mnist.train.next_batch(BATCH_SIZE)

一些常用的函数

tf.get_collection("")       #从集合中取全部变量,生成一个列表
tf.add_n([])                    #列表内对应元素相加
tf.cast(x, dtype)           #把x转换为dtype类型
tf.argmax(x, axis)      #返回最大值所在索引号 如: tf.argmax([1,0,0], 1) 返回0
import os
os.path.join("home", "name")    #f返回home/name
字符串.split()             #按照指定的拆分符对字符串切片,返回分割后的列表
#如:'./model/mnist_model-1001'.split('-')[-1] 返回1001
with tf.Graph().as_default() as g:      #其内定义的节点在计算图g中

保存模型

saver = tf.train.Saver()            #实例化saver对象
with tf.Session() as sess:          #在with结构for循环中一定轮数时保存模型到当前会话for i in ranges(STEPS):         #拼接成./MODEL_SAVE_PATH/MODEL_NAME-global_stepif i  % 轮数 == 0:saver.save(sess, os.path.join(MODEL_SAVE_PATH, MODEL_NAME), global_step = global_step)

加载模型

with tf.Session() as sess:ckpt = tf.train.get_checkpoint_state(存储路径)if ckpt and ckpt.model_checkpoint_path:saver.restore(sess,ckpt.model_checkpoint_path)

实例化课还原滑动平均值的saver

ema = tf.train.ExponentialMovingAverage(滑动平均基数)
ema_restore = ema.variables_to_restore()
saver = tf.train.Saver(ema_restore)

准确率计算方法

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

5.2 模块化搭建神经网络八股

forward.py

def forward(x, regularizer):w = b = y = return y
def get_weight(shape, regularizer):pass
def get_bias(shape):pass

backward.py

def backward(mnist):x =y_ =y =         #复现前向传播,计算出yglobal_step = loss =<正则化,指数衰减学习率,滑动平均>train_step = 实例化Saverwith tf.Session() as sess:初始化for i in range(STEPS):sess.run(train_step,feed_dict={x:, y_:})if i%轮数 ==0:printsaver.save()

损失函数loss含正则化regularization
backward.py中加入

ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_,1))
cem = tf.reduce_mean(ce)
loss = cem+tf.add_n(tf.get_collection('losses'))

forward.py中加入

if regularizer != None:tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))

学习率learning_rate
backward.py中加入

learning_rate = tf.train.exponential_decay(
LEARNING_RATE_BASE,
global_step,
LEARNING_RATE_STEP,
LEARNING_RATE_DECAY,
staircase = True)

滑动平均ema

ema = tf.train.ExponentialMovingAverage(衰减率MOVING_AVERAGE_DECAY,当前轮数global_step)
ema_op = ema.apply(tf.trainable_variables())
with tf.control_dependencies([train_step,ema_op]):train_op = tf.no_op(name='train')

test.py

def test(mnist):with tf.Graph()as_default()as g:x = y_ = y = 实例化可还原滑动平均值的saver计算正确率while True:with tf.Session() as sess:ckpt = tf.train.get_checkpoint_state(存储路径)    #加载ckpt模型if ckpt and ckpt.model_checkpoint_path:         #如果已经有ckpt模型则恢复saver.restore(sess,ckpt.model_checkpoint_path) #恢复会话global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1] #恢复轮数accuracy_score = sess.run(accuracy, feed_dict={x:mnist.test.images, y_:mnist.test.labels}) #计算准确率print("After %s training steps, test accuracy = %g" % (global_step, accuracy_score))else: #如果没有模型print("No checkpoint file found!")  #给出提示returndef main():mnist = input_data.read_data_sets("./data/", one_hot=True)test(mnist)if __name__=='__main__':main()               

5.3 手写数字识别准确率输出

前向传播 mnist_forward.py

#coding:utf-8
import tensorflow as tfINPUT_NODE = 784
OUTPUT_NODE = 10
LAYER1_NODE = 500def get_weight(shape, regularizer):w = tf.Variable(tf.truncated_normal(shape,stddev=0.1))if regularizer != None: tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))return wdef get_bias(shape):b = tf.Variable(tf.zeros(shape))return bdef forward(x, regularizer):w1 = get_weight([INPUT_NODE, LAYER1_NODE], regularizer)b1 = get_bias([LAYER1_NODE])y1 = tf.nn.relu(tf.matmul(x, w1) + b1)w2 = get_weight([LAYER1_NODE, OUTPUT_NODE], regularizer)b2 = get_bias([OUTPUT_NODE])y = tf.matmul(y1, w2) + b2return y

反向传播 mnist_backward.py

#coding:utf-8
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import mnist_forward
import osBATCH_SIZE = 200
LEARNING_RATE_BASE = 0.1
LEARNING_RATE_DECAY = 0.99
REGULARIZER = 0.0001
STEPS = 50000
MOVING_AVERAGE_DECAY = 0.99
MODEL_SAVE_PATH = 'G:/model/'   #这里是我选择放置训练好的model的路径,根据自己的需要进行修改
MODEL_NAME = 'mnist_model'
DATA_PATH = 'G:/datasets/mnist' #这里是我放置dataset的路径,根据自己的需要进行修改def backward(mnist):x = tf.placeholder(tf.float32, [None, mnist_forward.INPUT_NODE])y_ = tf.placeholder(tf.float32, [None, mnist_forward.OUTPUT_NODE])y = mnist_forward.forward(x, REGULARIZER)global_step = tf.Variable(0, trainable=False)ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_, 1))cem = tf.reduce_mean(ce)loss = cem + tf.add_n(tf.get_collection('losses'))learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,mnist.train.num_examples / BATCH_SIZE,LEARNING_RATE_DECAY,staircase = True)train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)ema_op = ema.apply(tf.trainable_variables())with tf.control_dependencies([train_step, ema_op]):train_op = tf.no_op(name = 'train')saver = tf.train.Saver()with tf.Session() as sess:init_op = tf.global_variables_initializer()sess.run(init_op)for i in range(STEPS):xs, ys = mnist.train.next_batch(BATCH_SIZE)_, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x: xs, y_: ys})if i % 1000 == 0:print("After %d training steps, loss on training batch is %g." % (step, loss_value))saver.save(sess, os.path.join(MODEL_SAVE_PATH,MODEL_NAME),global_step=global_step)def main():mnist = input_data.read_data_sets(DATA_PATH, one_hot = True)backward(mnist)if __name__ == '__main__':main()

测试输出准确率 mnist_test.py

#coding:utf-8
import time
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import mnist_backward
import mnist_forward
TEST_INTERVAL_SECS = 5
DATA_PATH = 'G:/datasets/mnist' #这里是我放置dataset的路径,根据自己的需要进行修改
def test(mnist):with tf.Graph().as_default() as g:x = tf.placeholder(tf.float32, [None, mnist_forward.INPUT_NODE])y_ = tf.placeholder(tf.float32, [None, mnist_forward.OUTPUT_NODE])y = mnist_forward.forward(x, None)ema = tf.train.ExponentialMovingAverage(mnist_backward.MOVING_AVERAGE_DECAY)ema_restore = ema.variables_to_restore()saver = tf.train.Saver(ema_restore)correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))while True:with tf.Session() as sess:ckpt = tf.train.get_checkpoint_state(mnist_backward.MODEL_SAVE_PATH)if ckpt and ckpt.model_checkpoint_path:saver.restore(sess, ckpt.model_checkpoint_path)global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]accuracy_score = sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})print("After %s training steps, test accuracy = %g" % (global_step, accuracy_score))else:print("No checkpoint file found!")returntime.sleep(TEST_INTERVAL_SECS)def main():mnist = input_data.read_data_sets(DATA_PATH, one_hot=True)test(mnist)if __name__ == '__main__':main()

运行结果::

跑这么个小玩意 ,电脑卡成狗/微笑

中国大学MOOC-人工智能实践:Tensorflow笔记-课程笔记 Chapter5相关推荐

  1. 中国大学Mooc -《现代礼仪》课程笔记 (湖南大学袁涤非老师)

    一  导论 礼仪的内涵与定义:约定俗成,共同认可的行为规范 礼仪的起源与发展 :简单化,国际化 礼仪的实质和原则:尊重,遵守,适度,自律 礼仪的特征与作用:继承性,差异性,针对性,规范性(握手,稍用力 ...

  2. 中国大学MOOC 人工智能导论第六章测试

    1 单选(2.5分) 以下说法错误的是: 得分/总分 A. 自动推理.知识图谱等技术是利用计算机建模来模拟人类总结知识.推理.求解问题的过程. B. 群体智能指在进化智能基础上充分发展个体智能后,将个 ...

  3. 中国大学MOOC 人工智能导论第一章测试

    1 单选(2.5分) 1956年达特茅斯会议上,学者们首次提出"artificial intelligence(人工智能)"这个概念时,所确定的人工智能研究方向不包括: 得分/总分 ...

  4. 中国大学MOOC 人工智能导论第七章测试

    1 单选(2.5分) 下列关于有监督学习的说法不正确的是 得分/总分 A. 支持向量机模型中距离平面最近的几个样本对平面的选择影响最大 B. 决策树算法中最能将样本数据显著分开的属性应该在决策早期就使 ...

  5. 中国大学MOOC 人工智能导论第五章测试

    1 单选(2.5分) 以下关于状态空间图的说法错误的是 得分/总分 A. 状态之间的连接指的是衔接.转移.导致等关系 B. 状态空间图未必一定能画出来 C. 将状态和连接合在一起可以构成状态图 D. ...

  6. 中国大学MOOC 人工智能导论第四章测试

    1 单选(2.5分) 以下知识库中,中文知识库是 得分/总分 A. HowNet 2.50/2.50 B. Cyc C. Conceptnet D. WordNet A 2 单选(2.5分) 以下说法 ...

  7. 中国大学MOOC 人工智能导论第三章测试

    1 单选(2.5分) 以下关于正向推理的说法正确的是 得分/总分 A. 正向推理以某个假设目标作为出发点 B. "如果P->Q为真,但Q不成立,则P也不成立"是假言推理 C. ...

  8. 人工智能实践:Tensorflow2.0笔记 北京大学MOOC(1-1)

    人工智能实践:Tensorflow2.0笔记 北京大学MOOC(1-1) 说明 一.神经网络计算过程 1. 人工智能三学派 2. 神经网络设计过程 2.1 人脑中的神经网络形成过程 2.2 计算机模仿 ...

  9. 人工智能实践:Tensorflow2.0笔记 北京大学MOOC(2-1)

    人工智能实践:Tensorflow2.0笔记 北京大学MOOC(2-1) 说明 一.神经网络的优化 1. 神经网络复杂度 2. 学习率策略 2.1 学习率概念回顾 2.2 动态调整学习率 2.2.1 ...

  10. 网易云计算机专业课程,网易云课堂推出在线中国大学MOOC课程

    近日,中国大学MOOC在官方微博上发布了一个消息,称广东一名六岁稚童报名学习<大学计算机基础>课程,已经完成课程作业和期末考核,以84.21分的成绩获得了该门课程的MOOC证书.这条微博一 ...

最新文章

  1. 无盘工作站 服务器 性能,无盘工作站与有盘工作站比较,突出的优势有哪些?...
  2. 十多位全球技术专家,为你献上近十个小时的.Net微服务介绍
  3. 程序员如何掌握新技术与时俱进
  4. 【趣文翻译】如何用各种编程语言杀死一条龙,PHP大亮 [转]
  5. ubuntu16.04中将python3设置为默认
  6. 部署单节点OpenStack
  7. javase实现银行转账
  8. LeetCode刷了500+了总结了算法必背模板直接拿到字节实习offer
  9. H264格式说明及解析
  10. Ttest + 秩和检验
  11. c语言输出实心心矩形,c语言打印空白星号矩形
  12. windows分类及安装
  13. 阿里云MVP傅奎 | 聊聊区块链和加密货币相关的安全问题
  14. 【LeetCode】476. 数字的补数 Number Complement
  15. Vue实现图形化积木式编程(一)
  16. FinalShell离线激活
  17. Heritrix3.1.1使用教程
  18. raft协议_将Raft集成到JGroups中
  19. grx1660linux看视频掉帧,GTX1660Ti玩游戏如何 GTX1660ti游戏帧数实测
  20. dubbo-源码环境搭建

热门文章

  1. 线程状态的区别 blocked waitting ,join 详解
  2. 查看微信好友男女比例
  3. 关于“2021中国隧道与地下空间大会暨中国(城市)地下空间学会(筹)成立大会”的通知
  4. 关于insert和periodic的问题
  5. 2019年上半年英语四、六级成绩查询方式和时间
  6. Docker核心概念与实战
  7. 80C51单片机的串行通信技术
  8. 项目管理知识体系(PMBOK)
  9. 美术基础——角色设计
  10. 什么是云服务器?什么是阿里云服务器管理?