【TensorFlow-windows】TensorBoard可视化

前言

紧接上一篇博客,学习tensorboard可视化训练过程。

国际惯例,参考博客:

MNIST机器学习入门

Tensorboard 详解(上篇)

Tensorboard 可视化好帮手 2

tf-dev-summit-tensorboard-tutorial

tensorflow官方mnist_with_summaries

预备知识

根据之前学的知识,创建一个卷积结构进行手写数字分类

import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data#读取手写数字
mnist = input_data.read_data_sets('./dataset/',one_hot=True)#定义卷积操作
def conv_layer(input,size_in,size_out,name='conv'):with tf.name_scope(name):w=tf.Variable(tf.truncated_normal([5,5,size_in,size_out],stddev=0.1),name='W')b=tf.Variable(tf.constant(0.1,shape=[size_out]),name='B')conv = tf.nn.conv2d(input,w,strides=[1,1,1,1],padding='SAME')act = tf.nn.relu(conv+b)return tf.nn.max_pool(act,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')#全连接层
def fc_layer(input,size_in,size_out,name='fc'):with tf.name_scope(name):w=tf.Variable(tf.truncated_normal([size_in,size_out],stddev=0.1),name='W')b=tf.Variable(tf.constant(0.1,shape=[size_out]),name='B')act=tf.matmul(input,w)+breturn act#创建模型
def create_model(input_x):#卷积input_img = tf.reshape(input_x,[-1,28,28,1])conv1=conv_layer(input_img,1,32,'conv1')conv2=conv_layer(conv1,32,64,'conv2')#全连接flattened=tf.reshape(conv2,[-1,7*7*64])fc1=fc_layer(flattened,7*7*64, 1024,'fc1')act1=tf.nn.relu(fc1)out=fc_layer(act1,1024,10,'fc2')return out#定义网络输入,输出
X=tf.placeholder(tf.float32,shape=[None,28*28],name='x')
Y=tf.placeholder(tf.float32,shape=[None,10],name='y')logits = create_model(X) #创建模型
prediction=tf.nn.softmax(logits=logits,name='prediction') #预测# 损失函数
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits,labels=Y))
optimize = tf.train.AdamOptimizer(learning_rate=0.01)
train_op = optimize.minimize(loss_op)#评估函数
correct_pred = tf.equal(tf.argmax(prediction,1),tf.argmax(Y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))with tf.Session() as sess:sess.run(tf.global_variables_initializer())for step in range(20000):batch_xs,batch_ys=mnist.train.next_batch(50)sess.run(train_op,feed_dict={X:batch_xs,Y:batch_ys})if(step%10==0 or step==1):loss,acc = sess.run([loss_op,accuracy],feed_dict={X: mnist.test.images,Y: mnist.test.labels})print('Step:{0},loss:{1},acc:{2}'.format(step,loss,acc))

依旧是那几个流程:读数据→初始化相关参数→定义接收数据的接口以便测试使用→初始化权重和偏置→定义基本模块(编码和解码)→构建模型(先编码再解码)→定义预测函数、损失函数、优化器→训练

加入TensorBoard

从tensorflow的官方文档来看,支持可视化操作函数有:scalarimageaudiotexthistogram

这里我们只需要使用scalar可视化loss值的变动,image可视化部分输入数据、histogram可视化权重与偏置的分布。

很简单,调用方法统一是tf.summary

可视化卷积层的权重和偏置

#定义卷积操作
def conv_layer(input,size_in,size_out,name='conv'):with tf.name_scope(name):w=tf.Variable(tf.truncated_normal([5,5,size_in,size_out],stddev=0.1),name='W')        b=tf.Variable(tf.constant(0.1,shape=[size_out]),name='B')        conv = tf.nn.conv2d(input,w,strides=[1,1,1,1],padding='SAME')act = tf.nn.relu(conv+b)tf.summary.histogram(name+'/weights',w)tf.summary.histogram(name+'/bias',b)return tf.nn.max_pool(act,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

可视化部分训练数据:

#创建模型
def create_model(input_x):#卷积input_img = tf.reshape(input_x,[-1,28,28,1])tf.summary.image('input',input_img,3)conv1=conv_layer(input_img,1,32,'conv1')conv2=conv_layer(conv1,32,64,'conv2')#全连接flattened=tf.reshape(conv2,[-1,7*7*64])fc1=fc_layer(flattened,7*7*64, 1024,'fc1')act1=tf.nn.relu(fc1)out=fc_layer(act1,1024,10,'fc2')return out

可视化损失函数变动:

# 损失函数
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits,labels=Y))
tf.summary.scalar('loss',loss_op)

最终要把所有需要可视化的操作合并到一起:

merged=tf.summary.merge_all()

tensorflow中的操作一般需要由session执行,也就是说如果我们想写入日志,就需要在session中执行merged操作,并使用add_summary将每次训练的记录写入到日志文件。

with tf.Session() as sess:writer=tf.summary.FileWriter('logs/',sess.graph)sess.run(tf.global_variables_initializer())for step in range(20000):batch_xs,batch_ys=mnist.train.next_batch(50)sess.run(train_op,feed_dict={X:batch_xs,Y:batch_ys})if(step%10==0 or step==1):loss,acc,s = sess.run([loss_op,accuracy,merged],feed_dict={X: mnist.test.images[:100],Y: mnist.test.labels[:100]})print('Step:{0},loss:{1},acc:{2}'.format(step,loss,acc))writer.add_summary(s,step)

然后运行训练脚本,开始训练以后,打开终端,启动tensorboard

tensorboard --logdir 'logs'

其中最后一个参数logs代表日志存储的地方,根据自己的情况定义

运行以后会弹出一个网址:

/home/xx/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.from ._conv import register_converters as _register_converters
TensorBoard 1.12.2 at http://xx-XPS-8700:6006 (Press CTRL+C to quit)

浏览器中打开此网址,能够看到tensorboard显示的你想可视化的内容。

在这里插入图片描述

【注】可能参数不会实施更新,在右上角的齿轮那里可以调整刷新间隔,默认30s

后续

可视化对训练过程是十分重要的,有时候模型不起作用,loss不降或者炸了,可以通过权重来判断是否参数更新是否出现了问题,而且如果是生成对抗网络,可以把训练过程中的重建图像打印出来,也可以看到模型是否有效。
本博文源码:https://download.csdn.net/download/zb1165048017/11536994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习特征归一化方法——BN、LN、IN、GN

前言 最近看到Group Normalization的论文,主要提到了四个特征归一化方法:Batch Norm、Layer Norm、Instance Norm、Group Norm。此外,论文还提到了Local Response Normalization(LRN)、Weight Normalization(WN)、Batch Renormalization(BR)…

【TensorFlow-windows】keras接口——利用tensorflow的方法加载数据

前言 之前使用tensorflow和keras的时候,都各自有一套数据读取方法,但是遇到一个问题就是,在训练的时候,GPU的利用率忽高忽低,极大可能是由于训练过程中读取每个batch数据造成的,所以又看了tensorflow官方的…

骨骼动画——论文与代码精读《Phase-Functioned Neural Networks for Character Control》

前言 最近一直玩CV,对之前学的动捕知识都忘得差不多了,最近要好好总结一下一直以来学习的内容,不能学了忘。对2017年的SIGGRAPH论文《Phase-Functioned Neural Networks for Character Control》进行一波深入剖析吧,结合源码。 额…

颜色协调模型Color Harmoniztion

前言 最近做换脸,在肤色调整的那一块,看到一个有意思的文章,复现一波玩玩。不过最后一步掉链子了,有兴趣的可以一起讨论把链子补上。 主要是github上大佬的那个复现代码和原文有点差异,而且代码复杂度过高&#xff0…

Openpose推断阶段原理

前言 之前出过一个关于openpose配置的博客,不过那个代码虽然写的很好,而且是官方的,但是分析起来很困难,然后再opencv相关博客中找到了比较清晰的实现,这里分析一波openpose的推断过程。 国际惯例,参考博…

换脸系列——眼鼻口替换

前言 想着整理一下换脸相关的技术方法,免得以后忘记了,最近脑袋越来越不好使了。应该会包含三个系列: 仅换眼口鼻;换整个面部;3D换脸 先看看2D换脸吧,网上已经有现成的教程了,这里拿过来整理一…

换脸系列——整脸替换

前言 前面介绍了仅替换五官的方法,这里介绍整张脸的方法。 国际惯例,参考博客: [图形算法]Delaunay三角剖分算法 维诺图(Voronoi Diagram)分析与实现 Delaunay Triangulation and Voronoi Diagram using OpenCV (…

3D人脸重建——PRNet网络输出的理解

前言 之前有款换脸软件不是叫ZAO么,分析了一下,它的实现原理绝对是3D人脸重建,而非deepfake方法,找了一篇3D重建的论文和源码看看。这里对源码中的部分函数做了自己的理解和改写。 国际惯例,参考博客: 什…

tensorflow官方posenet模型解析

前言 tensorflow官方有个姿态估计项目,这个输入和openpose还有点不一样,这里写个单人情况下的模型输出解析方案。 国际惯例,参考博客: 博客: 使用 TensorFlow.js 在浏览器端上实现实时人体姿势检测 tensorflow中posnet的IOS代…

tensorflow2安装时候的一个dll找不到的错误

电脑环境: vs2015python3.7.6,使用anaconda安装的CUDA 10.1cuDnn 7.6.5tensorflow2.1.0 错误内容 File "C:\Users\zb116\anaconda3\lib\imp.py", line 242, in load_modulereturn load_dynamic(name, filename, file)File "C:\Users\z…

PCA、SVD、ZCA白化理论与实现

简介 在UFLDL中介绍了主成分分析这一块的知识,而且当时学机器学习的时候,老师是将PCA和SVD联系起来将的,同时UFLDL也讲到了使用PCA做数据白化whitening处理,这个词经常在论文里面看到。 国际惯例,参考博客&#xff1…

OpenCV使用Tensorflow2-Keras模型

前言 最近工作上需要在C上快速集成Tensorflow/Keras训练好的模型,做算法验证。首先想到的就是opencv里面的dnn模块了,但是它需要的格式文件比较郁闷,是pb格式的模型,但是keras通常保存的是h5文件,查阅了很多资料&…

3D人脸表情驱动——基于eos库

前言 之前出过三篇换脸的博文,遇到一个问题是表情那一块不好处理,可行方法是直接基于2D人脸关键点做网格变形,强行将表情矫正到目标人脸,还有就是使用PRNet的思想,使用目标人脸的顶点模型配合源人脸的纹理&#xff0c…

3D姿态估计——ThreeDPose项目简单易用的模型解析

前言 之前写过tensorflow官方的posenet模型解析,用起来比较简单,但是缺点是只有2D关键点,本着易用性的原则,当然要再来个简单易用的3D姿态估计。偶然看见了ThreeDPose的项目,感觉很强大的,所以把模型扒下来…

简易的素描图片转换流程与实现

前言 之前经常在网上看到用PS实现真实图片到素描图片的转换,但是流程都大同小异,身为一只程序猿,必须来个一键转化额。 国际惯例,参考博客: Photoshop基础教程:混合模式原理篇 颜色减淡的原理讲解以及应…

一个简单好用的磨皮祛斑算法理论和python实现

前言 最近看了一个磨皮算法祛斑感觉效果不错,效果图看文末就行,个人觉得效果非常不错滴。 国际惯例,参考博客: 磨皮算法的源码:YUCIHighPassSkinSmoothing How To Smooth And Soften Skin With Photoshop 图像算法…

OpenVINO——配置与道路分割案例

前言 最近看到了一个深度学习库OpenVINO,专门用于Intel硬件上部署深度学习模型,其内置了非常非常多使用的预训练模型,比如道路分割、人脸提取、3D姿态估计等等。但是配置和调用有点小恶心,这里以道路分割为例,展示如何…

图像颜色迁移《color transfer between images》

前言 前段时间,在深度学习领域不是有个比较火的方向叫风格迁移的嘛,对于我这种不喜欢深度学习那种不稳定结果的人来说,还是想看看传统图像处理领域有什么类似的技术,发现了一个颜色迁移的算法,很久前的论文了。 国际…

ColorSpace颜色空间简介

前言 如果看过之前的介绍的图像颜色迁移《color transfer between images》和颜色协调模型Color Harmoniztion就会发现,大部分图像处理算法虽然输入输出是RGB像素值,但是中间进行算法处理时很少直接更改RGB值,而是转换到其它空间&#xff0c…

Ogre共享骨骼与两种骨骼驱动方法

前言 最近业务中用到Ogre做基于3D关键点虚拟角色骨骼驱动,但是遇到两个问题: 身体、头、眼睛、衣服等mesh的骨骼是分开的,但是骨骼结构都是一样的,需要设置共享骨骼驱动的时候可以直接修改骨骼旋转量,或者将旋转量存…