Tensorflow实战google深度学习框架中章节

import os
os.getcwd()  #查看当前路径
'E:\\深度学习\\mnist'
os.chdir('E:\深度学习\mnist')   #把当前路径设置为  E:\深度学习\mnist

1. 导入相应的模块

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

2. 设置输入、输出节点数目以及神经网络相应的参数

INPUT_NODE = 784     #输入节点数目
OUTPUT_NODE = 10     #输出节点数目LAYER1_NODE = 500    # 隐藏层节点数
BATCH_SIZE = 100     # 每次batch打包的样本个数        ##模型相关的参数
LEARNING_RATE_BASE = 0.8    #基础的学习率
LEARNING_RATE_DECAY = 0.99  #学习率的衰减率
REGULARAZTION_RATE = 0.0001  #正则项前的表示系数
TRAINING_STEPS = 5000        #训练轮数
MOVING_AVERAGE_DECAY = 0.99  #滑动平均衰减率

3. 定义辅助函数来计算前向传播结果,使用ReLU做为激活函数

def inference(input_tensor, avg_class, weights1, biases1, weights2, biases2):# 不使用滑动平均类if avg_class == None:layer1 = tf.nn.relu(tf.matmul(input_tensor, weights1) + biases1)return tf.matmul(layer1, weights2) + biases2else:# 使用滑动平均类layer1 = tf.nn.relu(tf.matmul(input_tensor, avg_class.average(weights1)) + avg_class.average(biases1))return tf.matmul(layer1, avg_class.average(weights2)) + avg_class.average(biases2)

4. 定义训练过程

def train(mnist):x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input')y_ = tf.placeholder(tf.float32, [None, OUTPUT_NODE], name='y-input')# 生成隐藏层的参数。weights1 = tf.Variable(tf.truncated_normal([INPUT_NODE, LAYER1_NODE], stddev=0.1))biases1 = tf.Variable(tf.constant(0.1, shape=[LAYER1_NODE]))# 生成输出层的参数。weights2 = tf.Variable(tf.truncated_normal([LAYER1_NODE, OUTPUT_NODE], stddev=0.1))biases2 = tf.Variable(tf.constant(0.1, shape=[OUTPUT_NODE]))# 计算在当前参数下不含滑动平均值的前向传播结果y = inference(x, None, weights1, biases1, weights2, biases2)# 定义训练轮数及相关的滑动平均类,对所有代表神经网络参数的变量上使用滑动平均global_step = tf.Variable(0, trainable=False)variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)#tf.trainable_variables返回的就是图上集合variables_averages_op = variable_averages.apply(tf.trainable_variables())    average_y = inference(x, variable_averages, weights1, biases1, weights2, biases2)# 计算交叉熵及其平均值cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))#计算在当前batch中所有样例的交叉熵平均值cross_entropy_mean = tf.reduce_mean(cross_entropy)       # 损失函数的计算regularizer = tf.contrib.layers.l2_regularizer(REGULARAZTION_RATE)   #计算L2正则化损失函数regularaztion = regularizer(weights1) + regularizer(weights2)    #计算模型的正则化损失loss = cross_entropy_mean + regularaztion     #总的损失是交叉熵损失和正则化损失的和# 设置指数衰减的学习率。learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE, #基础的学习率,随着迭代的进行,更新变量时使用的学习率在这个基础上递减global_step,        #当前迭代的轮数mnist.train.num_examples / BATCH_SIZE,     #过完所有的训练数据需要的迭代次数LEARNING_RATE_DECAY,    #学习率衰减速度staircase=True)# 优化损失函数(包括交叉熵损失函数和L2正则化损失函数)train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)# 反向传播更新参数和更新每一个参数的滑动平均值# tf支持进行一次完成多个操作,既需要进行train_step又需要variables_averages_op# 例如创建一个group,把train_step和variables_averages_op两个操作放在一起进行,等同于以下操作:# with tf.control_dependencies([train_step, variables_averages_op]):#     train_op = tf.no_op(name='train')train_op = tf.group(train_step, variables_averages_op)    # 计算正确率# average_y.shape = [None, OUTPUT_NODE],tf.argmax(average_y, 1)表示返回average_y中最大值的序号# Signature: tf.argmax(input, axis=None, name=None, dimension=None, output_type=tf.int64)# Returns the index with the largest value across axes of a tensor. (deprecated arguments)correct_prediction = tf.equal(tf.argmax(average_y, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))# 初始化会话,并开始训练过程。with tf.Session() as sess:tf.global_variables_initializer().run()validate_feed = {x: mnist.validation.images, y_: mnist.validation.labels}test_feed = {x: mnist.test.images, y_: mnist.test.labels} # 迭代地训练神经网络。for i in range(TRAINING_STEPS):if i % 1000 == 0:        #每1000轮输出一次在实验集上的测试结果validate_acc = sess.run(accuracy, feed_dict=validate_feed)print("After %d training step(s), validation accuracy using average model is %g " % (i, validate_acc))#产生这一轮使用的一个batch的训练数据,并进行训练过程   xs,ys=mnist.train.next_batch(BATCH_SIZE)sess.run(train_op, feed_dict={x:xs,y_:ys})#训练结束后在测试集上检测模型的准确率    test_acc=sess.run(accuracy,feed_dict=test_feed)print(("After %d training step(s), test accuracy using average model is %g" %(TRAINING_STEPS, test_acc)))

5。主程序入口

## 我这里设定模型训练次数时是5000次
def main(argv=None):mnist = input_data.read_data_sets("../../datasets/MNIST_data", one_hot=True)train(mnist)if __name__=='__main__':main()
Extracting ../../datasets/MNIST_data\train-images-idx3-ubyte.gz
Extracting ../../datasets/MNIST_data\train-labels-idx1-ubyte.gz
Extracting ../../datasets/MNIST_data\t10k-images-idx3-ubyte.gz
Extracting ../../datasets/MNIST_data\t10k-labels-idx1-ubyte.gz
After 0 training step(s), validation accuracy using average model is 0.0614
After 1000 training step(s), validation accuracy using average model is 0.9778
After 2000 training step(s), validation accuracy using average model is 0.9832
After 3000 training step(s), validation accuracy using average model is 0.9836
After 4000 training step(s), validation accuracy using average model is 0.9826
After 5000 training step(s), test accuracy using average model is 0.9835

转载于:https://www.cnblogs.com/LouieZhang/p/8977384.html

Tensorflow训练神经网络相关推荐

  1. tensorflow训练神经网络时loss出现nan的问题

    tensorflow训练神经网络时loss出现nan的问题 一般情况下原因是由于优化器上的学习比率learning_rate定义值太大,如: train_step = tf.compat.v1.tra ...

  2. 吴裕雄 python 神经网络——TensorFlow训练神经网络:不使用隐藏层

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dataINPUT_NODE = 784 # ...

  3. 使用TensorFlow训练神经网络进行价格预测

    Using Deep Neural Networks for regression problems might seem like overkill (and quite often is), bu ...

  4. Tensorflow训练神经网络保存*.pb模型及载入*.pb模型

    1 神经网络结构 1.0 保存*.pb模型 import tensorflow as tf from tensorflow.python.framework import graph_util fro ...

  5. 使用TensorFlow训练神经网络识别MNIST数据一

    环境: python 3.7 tensorflow 1.14 代码: # import os # os.environ["TF_CPP_MIN_LOG_LEVEL"] = '2' ...

  6. 在浏览器上也能训练神经网络?TensorFlow.js带你玩游戏~

    How to train neural network on browser 无论你是刚开始深度学习,亦或是个老练的老手,建立一个神经网络的训练环境有时都会很痛苦.让神经网络的训练像加载一个网页,然后 ...

  7. 7月31日云栖精选夜读 | 在浏览器上也能训练神经网络?TensorFlow.js带你玩游戏~...

    无论你是刚开始深度学习,亦或是个老练的老手,建立一个神经网络的训练环境有时都会很痛苦.让神经网络的训练像加载一个网页,然后点击几下,然后你就准备好马上进行推理,会不会是件很棒的事呢?(那必须棒) 在本 ...

  8. 深度学习实战:tensorflow训练循环神经网络让AI创作出模仿莎士比亚风格的作品

    AI创作莎士比亚风格的作品 训练一个循环神经网络模仿莎士比亚 FLORIZEL: Should she kneel be? In shall not weep received; unleased m ...

  9. 你用iPhone打游戏,有人却用iPhone来训练神经网络

    来源:机器之心 本文长度为1600字,建议阅读5分钟 本文教你移动端如何直接训练LeNet卷积神经网络. 标签:人工智能 你知道吗?在 iOS 设备上也可以直接训练 LeNet 卷积神经网络,而且性能 ...

最新文章

  1. Python 语法相关知识
  2. html中hover有静止的命令,我可以通过JavaScript禁用CSS:hover效果吗?
  3. 松耦合和紧耦合的架构设计、性能对比
  4. linux ssh 报错 Write failed: Broken pipe 解决方法
  5. 【CyberSecurityLearning 3】批处理、用户与组管理、服务器远程管理、破解Windows系统密码
  6. .Net Validator验证框架 [ .Net | Validator Framework | Attribute ]
  7. .NET Core前后端分离快速开发框架(Core.3.1+AntdVue)
  8. 关于cp命令中拷贝所有的写法
  9. js遍历json数组给html td赋值,JS实现给json数组动态赋值的方法示例
  10. 泰斯花粉阻隔剂 怎么使用
  11. jQuery特效:实现网站导航抖动效果
  12. 【双清/双wipe】使用adb命令进行双清/双wipe
  13. 2021-09-27 win10 IPV6连接:无网络访问权限 怎么解决
  14. Linux中CPU亲和性(affinity)
  15. 【一日一logo_day_36】fai
  16. WebGL默认全屏显示
  17. 论文笔记---Topological acoustics
  18. 石墨笔记,Onenote,Effie哪个更适合评论家?
  19. 老板说java后台管理系统3天内必须上线,我丢了这套源码给他
  20. 【计算机网络】数据链路层(五)—— 广域网(PPP 协议与 HDLC 协议)

热门文章

  1. 是不是Cookie让禁用了,Session就一定不能用了呢
  2. 《Algorithms》常见排序算法比较
  3. Linux系统的目录结构 及各目录用途详解
  4. python 配置文件对比_Python3实现配置文件差异对比脚本
  5. vue 数组添加元素_Vue躬行记(3)——样式和表单
  6. au插件vst_Propellerhead改名Reason Studios,并推出插件版Reason 11
  7. localdate存mysql相差一天_如何在保存到mySQL数据库时阻止LocalDate更改
  8. 用户体验标准_产品体验问题评级标准——如何给产品体验问题定级?
  9. 计算机科学与技术专业实训手册,计算机科学与技术专业实习计划
  10. 人脸关键点:TCNN-Tweaked Convolutional Neural Networks