【tensorflow】——tensorboard可視化計算圖以及參數曲線圖loss圖

參考文獻:

https://zhuanlan.zhihu.com/p/71328244

目錄

1.可視化計算圖

2.可視化參數

3. 遠程tensorboard

4、報錯


真是出來混遲早是要還的,之前一直拒絕學習Tensorboard,因為實在是有替代方案,直到發現到了不得不用的地步。下面主要介紹一下怎么使用Tensorboard來可視化參數,損失以及準確率等變量。

1.可視化計算圖

下面是一個單層網絡的手寫體分類示例:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data", one_hot=True)batch_size = 100
n_batch = mnist.train.num_examples // batch_sizewith tf.name_scope('input'):x = tf.placeholder(dtype=tf.float32, shape=[None, 784], name='x_input')y = tf.placeholder(dtype=tf.int32, shape=[None, 10], name='y_input')with tf.name_scope('layer'):with tf.name_scope('weights'):W = tf.Variable(tf.random_uniform([784, 10]), name='w')with tf.name_scope('biases'):b = tf.Variable(tf.zeros(shape=[10], dtype=tf.float32), name='b')with tf.name_scope('softmax'):prediction = tf.nn.softmax(tf.nn.xw_plus_b(x, W, b))
with tf.name_scope('Loss'):loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
with tf.name_scope('train'):train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
with tf.name_scope('acc'):correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))with tf.Session() as sess:sess.run(tf.global_variables_initializer())writer = tf.summary.FileWriter('logs/', sess.graph)for epoch in range(20):for batch in range(n_batch):batch_x, batch_y = mnist.train.next_batch(batch_size)_, accuracy = sess.run([train_step, acc], feed_dict={x: batch_x, y: batch_y})if batch % 50 == 0:print("### Epoch: {}, batch: {} acc on train: {}".format(epoch, batch, accuracy))accuracy = sess.run(acc, feed_dict={x: mnist.test.images, y: mnist.test.labels})print("### Epoch: {},  acc on test: {}".format(epoch, accuracy))

其計算圖的可視化結果如下所示:

?

?

其中圖中灰色的圓角矩形就是代碼中的一個個命名空間tf.name_scope(),而且命名空間是可以嵌套定義的。從計算圖中,可以清楚的看到各個操作的詳細信息,以及數據量的形狀和流向等。這一操作的實現,就全靠第31行代碼。執行完這句代碼后,會在你指定路徑(此處為代碼所在路徑的logs文件夾中)中生成一個類似名為events.out.tfevents.1561711787的文件。其打開步驟如下:

  • 首先需要安裝tensorflowtensorboard
  • 打開命令行(Linux終端),進入到log的上一層目錄;
  • 運行命令tensorboard --logdir=logs
  • 如果成功,則會有以下提示:
    • TensorBoard 1.5.1 at http://DESKTOP-70LJI62:6006 (Press CTRL+C to quit)

  • 如果有任何報錯,最直接的辦法就是卸載tensorflow重新安裝,若是有多個環境建議用Anaconda管理
  • 將后面的地址粘貼到瀏覽器中(最好是谷歌),然后就能看到了,可以雙擊各個結點查看詳細信息

2.可視化參數

可視化網絡計算圖不是太有意義,而更有意義的是在訓練網絡的同時能夠看到一些參數的變換曲線圖(如:準確率,損失等),以便于更好的分析網絡。

?

?

要實現這個操作,只需要添加對應的tf.summary.scalar('acc', acc)語句即可,然后最后合并所有的summary即可。但是,通常情況下網絡層的參數都不是標量,而是矩陣這類的;對于這種變量,通常的做法就是計算其最大、最小、平均值以及直方圖等。由于對于很多參數都會用到同樣的這幾個操作,所以在這里就統一定義函數:

def variable_summaries(var):with tf.name_scope('summaries'):mean = tf.reduce_mean(var)tf.summary.scalar('mean', mean)with tf.name_scope('stddev'):stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))tf.summary.scalar('stddev', stddev)tf.summary.scalar('max', tf.reduce_max(var))tf.summary.scalar('min', tf.reduce_min(var))tf.summary.histogram('histogram', var)

然后在需要可視化參數的地方,調用這個函數即可。

mnist = input_data.read_data_sets("MNIST_data", one_hot=True)batch_size = 100n_batch = mnist.train.num_examples // batch_size
with tf.name_scope('input'):x = tf.placeholder(dtype=tf.float32, shape=[None, 784], name='x_input')y = tf.placeholder(dtype=tf.int32, shape=[None, 10], name='y_input')with tf.name_scope('layer'):with tf.name_scope('weights'):W = tf.Variable(tf.random_uniform([784, 10]), name='w')variable_summaries(W)####with tf.name_scope('biases'):b = tf.Variable(tf.zeros(shape=[10], dtype=tf.float32), name='b')variable_summaries(b)with tf.name_scope('softmax'):prediction = tf.nn.softmax(tf.nn.xw_plus_b(x, W, b))
with tf.name_scope('Loss'):loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))tf.summary.scalar('loss', loss)
with tf.name_scope('train'):train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
with tf.name_scope('acc'):correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))tf.summary.scalar('acc', acc)merged = tf.summary.merge_all()
with tf.Session() as sess:sess.run(tf.global_variables_initializer())writer = tf.summary.FileWriter('logs/', sess.graph)for epoch in range(20):for batch in range(n_batch):batch_x, batch_y = mnist.train.next_batch(batch_size)_, summary, accuracy = sess.run([train_step, merged, acc], feed_dict={x: batch_x, y: batch_y})if batch % 50 == 0:print("### Epoch: {}, batch: {} acc on train: {}".format(epoch, batch, accuracy))writer.add_summary(summary, epoch * n_batch + batch)accuracy = sess.run(acc, feed_dict={x: mnist.test.images, y: mnist.test.labels})print("### Epoch: {},  acc on test: {}".format(epoch, accuracy))

如上代碼中的第14、17、22、28行所示。最后,在每次迭代的時候,將合并后的merged進行計算并寫道本地文件中(第40行)。最后,按照上面的方法,用tensorboard打開即可。

注:這個不用等到整個過程訓練完才能可視化,而是你在訓練過程中就能看到的,而且是每30秒根據生成的數據刷新一次,還是很Nice的。

?

?

3. 遠程tensorboard

由于條件所限,通常在進行深度學習時都是在遠處的服務器上進行訓練的,所以此時該怎么在本地電腦可視化呢?答案是利用SSH的方向隧道技術,將服務器上的端口數據轉發到本地對應的端口,然后就能在本地方法服務器上的日志數據了。

從上面連接成功后的提示可以知道,tensorboard所用到的端口時6006(沒準兒哪天就換了),所以我們只需將該端口的數據轉發到本地即可。

  • ssh -L 16006:127.0.0.1:6006 account@server.address
  • 其中16006是本地的任意端口,只要不和本地應用有沖突就行,隨便寫;
  • 后面的account指你服務器的用戶名,緊接是Ip

windows的話,直接在命令行里執行這條令就行(也不知道啥時候windows命令行也支持ssh了)

在登陸成功后(此時已遠程登陸了服務器),同樣進入到logs目錄的上層目錄,然后運行tensorboard --logdir=logs;最后,在本地瀏覽器中運行127.0.0.1:16006即可。

?

4、報錯

可能會出“AttributeError: module 'tensorflow' has no attribute 'io'”錯誤

這可能是因為tensorboard版本過高或者和tensorflow版本不匹配導致

本人tensorflow版本為1.5.0,tensorboard版本為1.8.0,最終解決了報錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255995.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255995.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255995.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Lab01:Xv6 and Unix utilities

實驗測試方法 實驗的測試方法主要有2個: 進入到Xv6系統中,執行相應的命令使用實驗提供的評分測試 對于單個實驗,可以使用 make GRADEFLAGSapplication grade其中application為要測試的實驗應用,例如sleep實驗對應的評分測試命令…

jQuery學習- 位置選擇器

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>位置選擇器</title><script src"js/jquery.js"></script><script type"text/javascript">$(function(){//獲取第一個li$(&quo…

數據類型之元組

存多個值&#xff0c;對比列表來說&#xff0c;元組不可變&#xff08;是可以當做字典的key的&#xff09;&#xff0c;主要是用來讀 與列表類型比&#xff0c;只不過[]換成()age(11,22,33,44,55) #本質agetuple((11,22,33,44,55)) print(type(age)) age[0]12 t(1,2,[a,b]) pri…

cocos2d-x3.6 連連看連通畫線

我的博客&#xff1a;http://blog.csdn.net/dawn_moon 網上看到非常多人寫的連連看&#xff0c;都沒有畫連線的實現。事實上要話連線挺簡單的。cocos2d-x 提供了一個非常方便的繪圖形的類。DrawNode。這個類封裝了非常多畫線條&#xff0c;多邊形的方法。非常方便&#xff0c;非…

阿里云大數據計算服務MaxCompute(上篇)

關于阿里云大數據計算服務MaxCompute的詳細內容&#xff1a; 阿里云大數據計算服務MaxCompute使用教程 &#xff08;MaxCompute&#xff08;原ODPS&#xff09;是一項大數據計算服務&#xff0c;它能提供快速、完全托管的PB級數據倉庫解決方案&#xff0c;使您可以經濟并高效的…

Vue3、TypeScript 實現圖片數量及大小隨寬度自適應調整

前言 過了這么久&#xff0c;想起自己還有個博客&#xff0c;更點內容吧&#xff01; 來&#xff0c;上需求&#xff01; 最近在做個前端界面&#xff0c;要求在一行中展示一些圖片&#xff0c;展示的圖片數量隨著窗口寬度大小進行變化&#xff0c;除此之外還有以下要求&…

【tensorFlow】——圖像數據增強、讀取圖像、保存圖像

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/4/13 10:54 # @Author : @linlianqin # @Site : # @File : 數據增強(distorted).py # @Software: PyCharm # @description:一些基于TensorFlow的數據處理方法import tensorflow as tf import cv2 im…

數據分析方法有哪些_數據分析方法

數據分析方法有哪些_數據分析方法 隨著大數據的到來&#xff0c;數據分析師成為大數據時代一顆冉冉升起的新星&#xff0c;現在企業越來越重視大數據&#xff0c;數據分析師這個職業也成為企業爭搶的對象。那么數據分析師的分析數據的方法都有哪些呢&#xff1f; 1、數據分析遵…

蘋果Iphone/Ipad--L2T虛擬教程

1 Iphone和Ipad同為IOS&#xff0c;設置方法相同。首先進入IOS系統的“設置”程序。 2 點擊“通用”進入通用設置&#xff0c;點擊“”; 3 選擇"添加設置 "&#xff1b; 4 選擇L2TP方式&#xff0c;填寫必要信息&#xff1a;描述、服務器地址 、您注冊充值的賬號及密…

記憶化搜索的應用

記憶化搜索的應用 一般來說&#xff0c;動態規劃總要遍歷所有的狀態&#xff0c;而搜索可以排除一些無效狀態。更重要的是搜索還可以剪枝&#xff0c;可能剪去大量不必要的狀態&#xff0c;因此在空間開銷上往往比動態規劃要低很多。 如何協調好動態規劃的高效率與高消費之間的…

【深度學習】——DNN后向傳播、CNN后向傳播文章匯總

深度神經網絡&#xff08;DNN&#xff09;模型與前向傳播算法 深度神經網絡&#xff08;DNN&#xff09;反向傳播算法(BP) 卷積神經網絡CNN的前向和后向傳播&#xff08;一&#xff09; 卷積神經網絡CNN的前向和后向傳播&#xff08;二&#xff09; 有batch normalization的卷積…

ajaxReturn 之前dump調試,導致$.ajax不能正常運行

ajaxReturn 之前dump調試&#xff0c;導致$.ajax不能正常運行 以后調試的時候&#xff0c;注意下這個情況轉載于:https://www.cnblogs.com/bushe/p/5180317.html

Veebot-自動靜脈抽血機器人

Veebot-自動靜脈抽血機器人 我們可能都有過被抽血的經驗。護士讓你握緊拳頭&#xff0c;用一根橡皮條壓住你上臂的血管&#xff0c;在你的肘部內側尋找你的靜脈&#xff0c;有時還需要拍打幾下&#xff0c;摸到隆起的靜脈血管&#xff0c;一針下去。有時候碰到技術好的護士&…

idea 轉普通項目為maven 項目

1、項目上右鍵 Add Framework Support。 2、選擇maven&#xff0c;點擊OK。 轉載于:https://www.cnblogs.com/mayanze/p/8042489.html

HDOJ5547 SudoKu

題目鏈接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5547 題目大意&#xff1a;填數獨。。。 思路&#xff1a;爆搜 1 #include <stdio.h>2 #include <string.h>3 #include <iostream>4 #include <algorithm>5 using namespace std;6 boo…

【深度學習之ResNet】——深度殘差網絡—ResNet總結

目錄 論文名稱&#xff1a;Deep Residual Learning for Image Recognition 摘要&#xff1a; 1、引言 2、為什么會提出ResNet殘差網絡呢&#xff1f; 3、深度殘差網絡結構學習&#xff08;Deep Residual learning&#xff09; &#xff08;1&#xff09;殘差單元 &#xf…

Atitit.??c#?語法新特性?c#2.0?3.0?4.0?4.5?5.0?6.0???attilax總結

Atitit. c# 語法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax總結 1.1. C# 1.0-純粹的面向對象 1.2. C# 2.0-泛型編程新概念 1.3. C# 2.0的另一個突出的特性就是匿名方法 1.4. C#3.0 linq 1.5. C# 4.0動態編程 dynamic 1.6. C# 4.5 異步編程 async和await 1.7. C# 5.0 更方便…

關于SafeMove White Paper功能

ABB機器人網站有一個 Safemove 功能的介紹&#xff0c;在Overview頁面右半版有一篇文檔是 SafeMove White Paper &#xff0c;在45頁的 pdf 文檔中&#xff0c;詳細了介紹工業機器人的安全原則&#xff0c;以及ABB工業機器人自身 EPS (Electronic Position Switches) 和 SafeMo…

面試疑難點解析

List,Set,Map,有什么區別&#xff1f; List和Set實際上市實現了Collection接口&#xff0c;那么Collection接口的原理你能簡單描述一下嗎&#xff1f; List接口可以插入多個NULL值&#xff0c;并且重復值&#xff0c;而且LIST是一個有序的集合。 Set是一個不可重復的集合&#…

【深度學習】——日常知識點總結(持續更新)

設計卷積網絡的原則&#xff1a; 1、最后轉為一維有兩種方式&#xff1a;1&#xff09;全局平均池化&#xff1b;2&#xff09;扁平化直接轉化為一維的 2、在卷積層的大小變化時盡量保證特征圖大小減小n倍時&#xff0c;特征圖的個數也增加n倍&#xff0c;維持網絡的復雜度&a…