专业做电脑系统下载网站,聚名网域名怎么备案,深圳网站制作电话,小鱼儿企业网站管理系统前言
紧接上一篇博客#xff0c;学习tensorboard可视化训练过程。
国际惯例#xff0c;参考博客#xff1a;
MNIST机器学习入门
Tensorboard 详解#xff08;上篇#xff09;
Tensorboard 可视化好帮手 2
tf-dev-summit-tensorboard-tutorial
tensorflow官方mnist_…前言
紧接上一篇博客学习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_hotTrue)#定义卷积操作
def conv_layer(input,size_in,size_out,nameconv):with tf.name_scope(name):wtf.Variable(tf.truncated_normal([5,5,size_in,size_out],stddev0.1),nameW)btf.Variable(tf.constant(0.1,shape[size_out]),nameB)conv tf.nn.conv2d(input,w,strides[1,1,1,1],paddingSAME)act tf.nn.relu(convb)return tf.nn.max_pool(act,ksize[1,2,2,1],strides[1,2,2,1],paddingSAME)#全连接层
def fc_layer(input,size_in,size_out,namefc):with tf.name_scope(name):wtf.Variable(tf.truncated_normal([size_in,size_out],stddev0.1),nameW)btf.Variable(tf.constant(0.1,shape[size_out]),nameB)acttf.matmul(input,w)breturn act#创建模型
def create_model(input_x):#卷积input_img tf.reshape(input_x,[-1,28,28,1])conv1conv_layer(input_img,1,32,conv1)conv2conv_layer(conv1,32,64,conv2)#全连接flattenedtf.reshape(conv2,[-1,7*7*64])fc1fc_layer(flattened,7*7*64, 1024,fc1)act1tf.nn.relu(fc1)outfc_layer(act1,1024,10,fc2)return out#定义网络输入输出
Xtf.placeholder(tf.float32,shape[None,28*28],namex)
Ytf.placeholder(tf.float32,shape[None,10],namey)logits create_model(X) #创建模型
predictiontf.nn.softmax(logitslogits,nameprediction) #预测# 损失函数
loss_op tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logitslogits,labelsY))
optimize tf.train.AdamOptimizer(learning_rate0.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_ysmnist.train.next_batch(50)sess.run(train_op,feed_dict{X:batch_xs,Y:batch_ys})if(step%100 or step1):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的官方文档来看支持可视化操作函数有scalar、image、audio、text、histogram
这里我们只需要使用scalar可视化loss值的变动image可视化部分输入数据、histogram可视化权重与偏置的分布。
很简单调用方法统一是tf.summary。
可视化卷积层的权重和偏置
#定义卷积操作
def conv_layer(input,size_in,size_out,nameconv):with tf.name_scope(name):wtf.Variable(tf.truncated_normal([5,5,size_in,size_out],stddev0.1),nameW) btf.Variable(tf.constant(0.1,shape[size_out]),nameB) conv tf.nn.conv2d(input,w,strides[1,1,1,1],paddingSAME)act tf.nn.relu(convb)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],paddingSAME)可视化部分训练数据
#创建模型
def create_model(input_x):#卷积input_img tf.reshape(input_x,[-1,28,28,1])tf.summary.image(input,input_img,3)conv1conv_layer(input_img,1,32,conv1)conv2conv_layer(conv1,32,64,conv2)#全连接flattenedtf.reshape(conv2,[-1,7*7*64])fc1fc_layer(flattened,7*7*64, 1024,fc1)act1tf.nn.relu(fc1)outfc_layer(act1,1024,10,fc2)return out可视化损失函数变动
# 损失函数
loss_op tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logitslogits,labelsY))
tf.summary.scalar(loss,loss_op)最终要把所有需要可视化的操作合并到一起
mergedtf.summary.merge_all()而tensorflow中的操作一般需要由session执行也就是说如果我们想写入日志就需要在session中执行merged操作并使用add_summary将每次训练的记录写入到日志文件。
with tf.Session() as sess:writertf.summary.FileWriter(logs/,sess.graph)sess.run(tf.global_variables_initializer())for step in range(20000):batch_xs,batch_ysmnist.train.next_batch(50)sess.run(train_op,feed_dict{X:batch_xs,Y:batch_ys})if(step%100 or step1):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 CTRLC to quit)浏览器中打开此网址能够看到tensorboard显示的你想可视化的内容。 【注】可能参数不会实施更新在右上角的齿轮那里可以调整刷新间隔默认30s
后续
可视化对训练过程是十分重要的有时候模型不起作用loss不降或者炸了可以通过权重来判断是否参数更新是否出现了问题而且如果是生成对抗网络可以把训练过程中的重建图像打印出来也可以看到模型是否有效。 本博文源码https://download.csdn.net/download/zb1165048017/11536994