TensorBoard应用进阶与TensorFlow游乐场
主要内容:
一、TensorBoard应用进阶
1.1图像的显示
在构建模型的输入层时,定义了占位符x,placeholder就是接收训练样本的图像数据。为了把这些图像在TensorBoard中显示出来,需要把它加入summary中去。
通过tf.summary.image()函数,把带进来的图像信息加到summary中去。它的第一个参数是标识ID;第二个参数是图像的数据;第三个参数为10,表示最多显示10张图片。
image_shaped_input要求的形是一个四维的模式,后面三个参数分别表示图像的长、宽以及颜色的通道数(灰度图为1),第一个参数表示一次有多少行数据,-1表示暂时不确定,会根据带进来所有数据的总数来计算。
1.2张量的显示
在TensorBoard中以直方图的形式显示在计算中一些tensor的情况
可以通过tf.summary.histogram()函数。它的第一个参数也是标识ID,第二个参数是要显示的tensor值。
1.3标量的显示
当我们定义好loss_function以后,就可以通过tf.summary.scalar()函数,把loss值以标量的形式显示出来。
我们还可以把准确率也以标量的形式显示出来。
1.4训练模型的显示
在训练模型的过程中,需要把前面所有定义的summary操作合并。
这里定义了一个merged_summary_op,直接调用tf.summary.merge_all()函数就可以了。
接下来把计算图写进去,调用了tf.summary.FileWriter()函数。
在训练的迭代过程中,需要生成真正写入到日志文件中的信息,通过sess.run()函数来实现,返回的结果赋给summary_str,并加入到摘要信息中。
完整代码为:
import tensorflow as tf import tensorflow.examples.tutorials.mnist.input_data as input_data import matplotlib.pyplot as plt import numpy as np from time import time #载入数据 mnist = input_data.read_data_sets("MNIST_data/",one_hot=True) #建立模型 — 定义全连接层函数 def fcn_layer(inputs,input_dim,output_dim,activation=None): #输入数据,输入神经元数量,输出神经元数量,激活函数 W = tf.Variable(tf.truncated_normal([input_dim, output_dim], stddev=0.1)) # 以截断正态分布的随机数初始化W b = tf.Variable(tf.zeros([output_dim])) # 以0初始化b XWb = tf.matmul(inputs, W)+b # 建立表达式:inputs * W + b if activation is None: # 薪认不使用激活函数 outputs = XWb else: # 若传入激活函数,则用其对输出结果进行变换 outputs = activation(XWb) return outputs #构建输入层 x= tf.placeholder(tf.float32, [None, 784], name='X') image_shaped_input = tf.reshape(x,[-1, 28, 28, 1]) tf.summary.image('input',image_shaped_input,10) #构建隐藏层 h1 = fcn_layer(inputs=x,input_dim=784,output_dim=256,activation=tf.nn.relu) #构建输出层 forward = fcn_layer(inputs=h1,input_dim=256,output_dim=10,activation=None) pred = tf.nn.softmax(forward) tf.summary.histogram('forward',forward) y= tf.placeholder(tf.float32, [None, 10], name='Y') #定义标签数据占位符 loss_function = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=forward,labels=y)) #注意第一个参数是不做Softmax的前向计算结果 tf.summary.scalar('loss',loss_function) #将loss损失以标量显示 #设置训练参数 train_epochs = 40 #训练轮数 batch_size=50 #单次训练样本数(批次大小) total_batch= int(mnist.train.num_examples/batch_size)#一轮训练有多少批次 display_step=1 #显示粒度 learning_rate=0.01 #学习率 #选择优化器 optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss_function) #定义准确率 correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(pred,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#准确率,将布尔值转化为浮点数,并计算平均值 tf.summary.scalar('accuracy',accuracy) sess = tf.Session() sess.run(tf.global_variables_initializer()) merged_summary_op = tf.summary.merge_all() #合并所有summary writer = tf.summary.FileWriter('log/',sess.graph) #创建写入符 startTime = time() for epoch in range(train_epochs): for batch in range(total_batch): xs, ys = mnist.train.next_batch(batch_size) # 读取批次数据 sess.run(optimizer,feed_dict={x:xs,y:ys}) # 执行批次训练 #生成summary summary_str = sess.run(merged_summary_op,feed_dict={x:xs,y:ys}) writer.add_summary(summary_str,epoch) #将summary写入文件 loss,acc = sess.run([loss_function,accuracy],feed_dict={x:mnist.validation.images,y:mnist.validation.labels}) #打印训练过程中的详细信息 if (epoch+1) % display_step == 0: print("Train Epoch:",'%02d' %(epoch+1),"Loss=","{:.9f}".format(loss),"Accuracy=","{:.4f}".format(acc)) duration = time()-startTime #显示运行总时间 print("Train Finished takes:","{:.2f}".format(duration)) #使用测试集评估模型 accu_test = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels}) print("Test Accuracy:",accu_test)
Note:未能正常显示TensorBoard,没找到原因
二、TensorFlow游乐场
TensorFlow游乐场是一个通过网页浏览器就可以训练简单神经网络的web应用。它不但可以让用户自定义神经网络的结构,还可以可视化训练过程。有利于初学者提高对神经网络的认识。
网址:http://playground.tensorflow.org
使用方法演示:https://minghuiwu.gitbook.io/tfbook/
原文地址:https://www.cnblogs.com/HuangYJ/p/11688153.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【动手学深度学习笔记】之PyTorch实现softmax回归
- 三分钟解决Fashion-MNIST无法下载的问题
- 【动手学深度学习笔记】之实现softmax回归模型
- python实现简单爬虫功能
- Python 爬虫入门—— IP代理使用
- Python爬虫入门:爬取pixiv
- Linux PID 一网打尽
- 使用libimobiledevice&ifuse提取iOS沙盒文件
- 你不知道的LinkedList(二):LinkedList的增删操作真的会比ArrayList快吗
- jupyter notebook中的魔法命令%run和%timeit
- js 常用正则
- 非常实用的 Python 技巧
- JavaScript中arguments
- js通过class name获得元素
- 基于JavaScript的rce反弹shell漏洞