1. 程式人生 > >TensorFlow基礎教程:tensorboard訓練過程視覺化

TensorFlow基礎教程:tensorboard訓練過程視覺化

TensorFlow自帶一個非常好的視覺化工具tensorboard,可以從極客學院檢視它的詳細介紹。

tensorboard介面,視覺化訓練過程。
tensorboard

  • 使用tensorboard需要首先定義好需要觀察的tensor的名字,以及運算過程的名字。
#在宣告張量時,輸入引數name即為顯示在tensorboard上張量的名字
x = tf.placeholder(tf.float32, [None, 784], name='InputData')  #輸入張量的名字
y = tf.placeholder(tf.float32, [None, 10], name='LabelData')   #輸出張量的名字
w = tf.Variable(tf.random_normal([n_input, n_hidden_1]), name='w') #權值張量的名字 #運算過程的名字,使用tf.name_scope('op_name')來定義 with tf.name_scope('Loss'): loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
  • 使用tf.summary記錄張量或者標量的值,以便用圖形顯示

四個記錄變數的函式

tf.summary.scalar('Loss'
, loss) #記錄標量 tf.summary.histogram('var_name', var) #變數的直方圖 tf.summary.distribution #變數的分佈圖 tf.summary.image #記錄影象
  • 在張量的名字以及要觀察的變數定義好之後,需要定義運算,在每次訓練時,執行該運算就可以記錄資料了
#使用tf.summary.merge_all()定義運算
merged_summary_op = tf.summary.merge_all()

#使用tf.summary.FileWriter(path, graph)將日誌寫入到檔案中
#path:日誌檔案儲存路徑, graph:需要儲存的圖 summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph()) #每次訓練時執行運算與寫入函式 with tf.Session() as sess: summary = sess.run(merged_summary_op, feed_dict) #執行運算 summary_writer.add_summary(summary, curr_step) #寫入檔案
  • 程式執行完後,在命令列輸入以下命令後,根據輸出提示在瀏覽器中輸入地址即可玩耍tensorboard了
tensorboard --logdir=logs_path
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf

learning_rate = 0.001
train_epochs = 20
batch_size = 64
logs_path = 'tmp/tensorflow_logs/mlp_mnist'   #日誌儲存路徑

n_input = 784
n_hidden1 = 100
n_hidden2 = 100
n_classes = 10

#name引數,記錄變數名字
x = tf.placeholder(tf.float32, shape=[None, n_input], name='InputData')
y = tf.placeholder(tf.float32, shape=[None, n_classes], name='LabelData')
weights = {'w1': tf.Variable(tf.random_normal([n_input, n_hidden1]), name='W1'),
           'w2': tf.Variable(tf.random_normal([n_hidden1, n_hidden2]), name='W2'),
           'w3': tf.Variable(tf.random_normal([n_hidden2, n_classes]), name='W3')}
biases = {'b1': tf.Variable(tf.random_normal([n_hidden1]), name='b1'),
          'b2': tf.Variable(tf.random_normal([n_hidden2]), name='b2'),
          'b3': tf.Variable(tf.random_normal([n_classes]), name='b3')}

def inference(input_x):
    layer_1 = tf.nn.relu(tf.matmul(x, weights['w1']) + biases['b1'])
    tf.summary.histogram('layer_1', layer_1)   #記錄變數直方圖
    layer_2 = tf.nn.relu(tf.matmul(layer_1, weights['w2']) + biases['b2'])
    tf.summary.histogram('layer_2', layer_2)   #記錄變數直方圖
    out_layer = tf.matmul(layer_2, weights['w3']) + biases['b3']
    return out_layer

#定義計算過程的名字
with tf.name_scope('Inference'):
    logits = inference(x)
with tf.name_scope('Loss'):
    loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))
with tf.name_scope('Optimizer'):
    optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
    train_op = optimizer.minimize(loss)
with tf.name_scope('Accuracy'):
    pre_correct = tf.equal(tf.argmax(y, 1), tf.argmax(tf.nn.softmax(logits), 1))
    accuracy = tf.reduce_mean(tf.cast(pre_correct, tf.float32))

#記錄張量的資料
tf.summary.scalar("Loss", loss)
tf.summary.scalar("Accuracy", accuracy)

init = tf.global_variables_initializer()
merged_summary_op = tf.summary.merge_all()   #定義記錄運算

with tf.Session() as sess:
    sess.run(init)
    summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph())   #建立寫物件
    total_batch = int(mnist.train.num_examples / batch_size)

    for epoch in range(train_epochs):
        for batch in range(total_batch):
            batch_x, batch_y = mnist.train.next_batch(batch_size)
            _, loss_, summary = sess.run([train_op, loss, merged_summary_op], feed_dict={x:batch_x, y:batch_y})   #執行記錄運算
            summary_writer.add_summary(summary, epoch * total_batch + batch)     #將日誌寫入檔案
        if epoch % 5 == 0:
            loss_, acc = sess.run([loss, accuracy], feed_dict={x:batch_x, y:batch_y})
            print("epoch {},  loss {:.4f}, acc {:.3f}".format(epoch, loss_, acc))

    print("optimizer finished!")

    #計算測試集的準確度
    test_acc = sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.labels})
    print('test accuracy', test_acc)

    #命令列輸入tensorboard --logdir==tmp/tensorflow_logs

相關推薦

TensorFlow基礎教程tensorboard訓練過程視覺

TensorFlow自帶一個非常好的視覺化工具tensorboard,可以從極客學院檢視它的詳細介紹。 tensorboard介面,視覺化訓練過程。 使用tensorboard需要首先定義好需要觀察的tensor的名字,以及運算過程的名字。 #

tensorflow筆記模型的儲存與訓練過程視覺

儲存與讀取模型 在使用tf來訓練模型的時候,難免會出現中斷的情況。這時候自然就希望能夠將辛辛苦苦得到的中間引數保留下來,不然下次又要重新開始。好在tf官方提供了儲存和讀取模型的方法。 儲存模型的方法: # 之前是各種構建模型graph的操作(矩

TensorFlow入門教程13訓練過程視覺分析

活用視覺化的結果,使用真正的人類智慧,可以一目瞭然的瞭解的演算法過程中的大致過程,這就是視覺化可以帶來的結果,在機器學習結果的展示上,能畫出來的就儘量不要以數字的形式print出來,這篇文章繼續分析y=3*x + 1的收斂過程,這裡我們來使用圖形化的方式來體驗

TensorFlow入門教程4視覺tensorboard

Tensorboard在pip中顯示的概要資訊是”lets you watch Tensors Flow“,watch tensors的flow就是Tensorboard所要做的視覺化的主要功能。一般用於確認tensorflow模型訓練過程的視覺化。 概要資訊

TensorFlow入門教程12訓練結果的視覺分析

上篇文章模擬了線性迴歸下的訓練的過程,並演示了訓練後的線性模型對資料的適應程度,同時使用視覺化的方式看到了結果的顯示,在學習的過程中,合理利用諸如matplotlib等庫函式,可以非常有效地對結果進行

TensorFlow入門教程8訓練資料之Iris資料集

Irises,聞名於世的不只是梵高那副價值超過5000萬美元的鳶尾花,同時還有Iris資料集。 Iris資料集由英國統計學家/生物學家Ronald Fisher在1936年所收集,共包含150條資料,

TensorFlow入門教程18Iris資料集的線性迴歸訓練

這篇文章使用實際的統計資料來確認對線性迴歸的曲線擬合的效果,Iris資料集中花瓣的長度和寬度之間的關係滿足明顯的線性關係,這裡我們將使用前文多次使用的方式來對Iris資料進行分析。 Iris資料集 四

【新手向】TensorFlow 安裝教程RK3399上運行谷歌人工智能

on() 總結 apt 朋友 alt 小型 start light 做了 從AlphaGo大勝柯潔後,谷歌的人工智能備受關註。人工智能好像離我們好遠,深度學習算法貌似非常復雜。但其實看看你的手機上的語音助手,相機上的人臉識別,今日頭條上幫你自動篩選出來的新聞,還有各大音樂軟

tensorflow精品教程變量

orm run AR import orf 否則 port imp initial import tensorflow as tfa = tf.Variable(tf.random_uniform(shape=[10, 10]))with tf.Session() as s

Java基礎教程面向對象編程

pac tps 存在 app span lsp 程序員 面向 解釋執行 Java基礎教程:面向對象編程 Java語言概述 Java語言特點 1.Java為純面向對象的語言,它能夠直接反映現實生活中的對象。總之,Everything is object! 2.平臺無關性。Ja

Java基礎教程面向對象編程[2]

是否 info clas 必要條件 耦合 oid 保護 類成員變量 因此 Java基礎教程:面向對象編程[2] 三大特性 封裝   封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節部份包裝、隱藏起來的方法。封裝可以被認為是一個保護屏障,防止該類的代

Java基礎教程JDBC編程

-c 一個數 ora 手動 itl bce 文件存儲 pst bit Java基礎教程:JDBC編程 快速開始 什麽是JDBC JDBC 指 Java 數據庫連接,是一種標準Java應用編程接口( JAVA API),用來連接 Java 編程語言和廣泛的數據庫。 JDBC

Java基礎教程HashTable與HashMap比較

唯一性 trac 並發 con 元素 散列表 個數 AR 底層 Java基礎教程:HashTable與HashMap比較 1. 關於HashMap的一些說法: a) HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。HashMap的底層結構是一個數

Java基礎教程多線程基礎(2)——線程間的通信

減少 wid png 同時 說明 類的方法 exc 當前 輪詢 Java基礎教程:多線程基礎(2)——線程間的通信 使線程間進行通信後,系統之間的交互性會更強大,在大大提高CPU利用率的同時還會使程序員對各線程任務在處理的過程中進行有效的把控與監督。 線程間的通信 思維

Java基礎教程註解

Java基礎教程:註解 概述   這篇文章參考了很多其他文章的寫作思路和篇章內容,主要用來幫助我們更好的理解Java中註解的使用,解開註解的神祕面紗。   維基百科上對註解的解釋是這樣的:   Java註解又稱Java標註,是Java語言5.0版本開始支援加入原始碼的特殊語法元資料[1]。Jav

Python資料分析基礎教程NumPy學習指南(第2版) pdf 下載

罕見的NumPy中文入門教程,Python資料分析優選從基礎的知識講起,手把手帶你進入大資料探勘領域囊括大量具有啟發性與實用價值的實戰案例。 內容簡介   《圖靈程式設計叢書;Python資料分析基礎教程:NumPy學習指南(第2版)》是NumPy的入門教程,主要介紹NumPy以及相關

網站優化基礎教程第一步就是做好長尾關鍵詞優化!

網站搭建好之後應該怎麼優化?有的人是指注重首頁的優化,即主關鍵詞優化,不重視長尾關鍵詞,然而,發跡創業網認為做好長尾優化才是網站優化的開始。 下面我們就來說說怎麼做好長尾關鍵詞優化,希望對大家有所幫助。 1, 確定網站標題 網站標題一般是以品牌詞+主關鍵片語成的,品牌詞儘量選擇哪種網上很少

分享《Python資料分析基礎教程NumPy學習指南(第2版)》高清中文PDF+英文PDF+原始碼

下載:https://pan.baidu.com/s/1YSD97Gd3gmmPmNkvuG0eew更多資料分享:http://blog.51cto.com/3215120 《Python資料分析基礎教程:NumPy學習指南(第2版)》高清中文PDF+高清英文PDF+原始碼 高清中文版PDF,249頁,帶

分享《Python資料分析基礎教程NumPy學習指南(第2版)》高清中文PDF+高清英文PDF+原始碼

下載:https://pan.baidu.com/s/1YSD97Gd3gmmPmNkvuG0eew 更多分享資料:https://www.cnblogs.com/javapythonstudy/ 《Python資料分析基礎教程:NumPy學習指南(第2版)》高清中文PDF+高清英文PDF+原始碼 高清

Python資料分析基礎教程NumPy學習指南 第二章 常用函式

目錄 第二章 常用函式 1    檔案讀寫示例 建立對角矩陣: np.eye(2)  儲存為txt檔案:np.savetxt("eye.txt", i2) 2    CSV檔案讀取: loadtxt() 3  &nb