TensorBoard的學(xué)習(xí)0-2

TensorBoard

TensorBoard的官網(wǎng)教程如下:

https://www.tensorflow.org/versions/r0.7/how_tos/summaries_and_tensorboard/index.html

簡(jiǎn)單解釋下:TensorBoard是個(gè)可視化工具宋欺,可以用來(lái)查看TensorFlow的圖以及過(guò)程中的各種值和圖像等泞辐。

1. 在tensorflow程序中給需要的節(jié)點(diǎn)添加“summary operations”每瞒,“summary operations”會(huì)收集該節(jié)點(diǎn)的數(shù)據(jù),并標(biāo)記上第幾步、時(shí)間戳等標(biāo)識(shí)是辕,寫入事件文件说搅。

事件文件的形式如下所示:

2. TensorBoard讀取事件文件析孽,并可視化Tensorflow的流程伍绳。

Demo演示

利用官網(wǎng)提供的例子進(jìn)行演示,官方例子提供了一個(gè)基于mnist的例子乍桂,我的文件的路徑如下:

~/libsource/tensorflow/tensorflow/examples/tutorials/mnist冲杀,

其中~/libsource/tensorflow/改為用戶自己的tensorflow路徑即可效床。

上述目錄下有一個(gè)mnist_with_summaries.py文件,即為加入了“summary operations”的mnist demo权谁。

啟動(dòng)mnist_with_summaries.py剩檀,

python mnist_with_summaries.py

mnist_with_summaries.py的源碼如下:

# Copyright 2015 The TensorFlow Authors. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the 'License');# you may not use this file except in compliance with the License.# You may obtain a copy of the License at##? ? http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an 'AS IS' BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# =============================================================================="""A simple MNIST classifier which displays summaries in TensorBoard.

This is an unimpressive MNIST model, but it is a good example of using

tf.name_scope to make a graph legible in the TensorBoard graph explorer, and of

naming summary tags so that they are grouped meaningfully in TensorBoard.

It demonstrates the functionality of every TensorBoard dashboard.

"""from__future__importabsolute_importfrom__future__importdivisionfrom__future__importprint_functionimporttensorflowastffromtensorflow.examples.tutorials.mnistimportinput_dataflags = tf.app.flagsFLAGS = flags.FLAGSflags.DEFINE_boolean('fake_data',False,'If true, uses fake data ''for unit testing.')flags.DEFINE_integer('max_steps',1000,'Number of steps to run trainer.')flags.DEFINE_float('learning_rate',0.001,'Initial learning rate.')flags.DEFINE_float('dropout',0.9,'Keep probability for training dropout.')flags.DEFINE_string('data_dir','/tmp/data','Directory for storing data')flags.DEFINE_string('summaries_dir','/tmp/mnist_logs','Summaries directory')deftrain():# Import datamnist = input_data.read_data_sets(FLAGS.data_dir,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? one_hot=True,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fake_data=FLAGS.fake_data)? sess = tf.InteractiveSession()# Create a multilayer model.# Input placehoolderswithtf.name_scope('input'):? ? x = tf.placeholder(tf.float32, [None,784], name='x-input')? ? y_ = tf.placeholder(tf.float32, [None,10], name='y-input')withtf.name_scope('input_reshape'):? ? image_shaped_input = tf.reshape(x, [-1,28,28,1])? ? tf.image_summary('input', image_shaped_input,10)# We can't initialize these variables to 0 - the network will get stuck.defweight_variable(shape):"""Create a weight variable with appropriate initialization."""initial = tf.truncated_normal(shape, stddev=0.1)returntf.Variable(initial)defbias_variable(shape):"""Create a bias variable with appropriate initialization."""initial = tf.constant(0.1, shape=shape)returntf.Variable(initial)defvariable_summaries(var, name):"""Attach a lot of summaries to a Tensor."""withtf.name_scope('summaries'):? ? ? mean = tf.reduce_mean(var)? ? ? tf.scalar_summary('mean/'+ name, mean)withtf.name_scope('stddev'):? ? ? ? stddev = tf.sqrt(tf.reduce_sum(tf.square(var - mean)))? ? ? tf.scalar_summary('sttdev/'+ name, stddev)? ? ? tf.scalar_summary('max/'+ name, tf.reduce_max(var))? ? ? tf.scalar_summary('min/'+ name, tf.reduce_min(var))? ? ? tf.histogram_summary(name, var)defnn_layer(input_tensor, input_dim, output_dim, layer_name, act=tf.nn.relu):"""Reusable code for making a simple neural net layer.

It does a matrix multiply, bias add, and then uses relu to nonlinearize.

It also sets up name scoping so that the resultant graph is easy to read,

and adds a number of summary ops.

"""# Adding a name scope ensures logical grouping of the layers in the graph.withtf.name_scope(layer_name):# This Variable will hold the state of the weights for the layerwithtf.name_scope('weights'):? ? ? ? weights = weight_variable([input_dim, output_dim])? ? ? ? variable_summaries(weights, layer_name +'/weights')withtf.name_scope('biases'):? ? ? ? biases = bias_variable([output_dim])? ? ? ? variable_summaries(biases, layer_name +'/biases')withtf.name_scope('Wx_plus_b'):? ? ? ? preactivate = tf.matmul(input_tensor, weights) + biases? ? ? ? tf.histogram_summary(layer_name +'/pre_activations', preactivate)? ? ? activations = act(preactivate,'activation')? ? ? tf.histogram_summary(layer_name +'/activations', activations)returnactivations? hidden1 = nn_layer(x,784,500,'layer1')withtf.name_scope('dropout'):? ? keep_prob = tf.placeholder(tf.float32)? ? tf.scalar_summary('dropout_keep_probability', keep_prob)? ? dropped = tf.nn.dropout(hidden1, keep_prob)? y = nn_layer(dropped,500,10,'layer2', act=tf.nn.softmax)withtf.name_scope('cross_entropy'):? ? diff = y_ * tf.log(y)withtf.name_scope('total'):? ? ? cross_entropy = -tf.reduce_mean(diff)? ? tf.scalar_summary('cross entropy', cross_entropy)withtf.name_scope('train'):? ? train_step = tf.train.AdamOptimizer(FLAGS.learning_rate).minimize(? ? ? ? cross_entropy)withtf.name_scope('accuracy'):withtf.name_scope('correct_prediction'):? ? ? correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))withtf.name_scope('accuracy'):? ? ? accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))? ? tf.scalar_summary('accuracy', accuracy)# Merge all the summaries and write them out to /tmp/mnist_logs (by default)merged = tf.merge_all_summaries()? train_writer = tf.train.SummaryWriter(FLAGS.summaries_dir +'/train',? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sess.graph)? test_writer = tf.train.SummaryWriter(FLAGS.summaries_dir +'/test')? tf.initialize_all_variables().run()# Train the model, and also write summaries.# Every 10th step, measure test-set accuracy, and write test summaries# All other steps, run train_step on training data, & add training summariesdeffeed_dict(train):"""Make a TensorFlow feed_dict: maps data onto Tensor placeholders."""iftrainorFLAGS.fake_data:? ? ? xs, ys = mnist.train.next_batch(100, fake_data=FLAGS.fake_data)? ? ? k = FLAGS.dropoutelse:? ? ? xs, ys = mnist.test.images, mnist.test.labels? ? ? k =1.0return{x: xs, y_: ys, keep_prob: k}foriinrange(FLAGS.max_steps):ifi %10==0:# Record summaries and test-set accuracysummary, acc = sess.run([merged, accuracy], feed_dict=feed_dict(False))? ? ? test_writer.add_summary(summary, i)? ? ? print('Accuracy at step %s: %s'% (i, acc))else:# Record train set summaries, and trainifi %100==99:# Record execution statsrun_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)? ? ? ? run_metadata = tf.RunMetadata()? ? ? ? summary, _ = sess.run([merged, train_step],? ? ? ? ? ? ? ? ? ? ? ? ? ? ? feed_dict=feed_dict(True),? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options=run_options,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? run_metadata=run_metadata)? ? ? ? train_writer.add_run_metadata(run_metadata,'step%d'% i)? ? ? ? train_writer.add_summary(summary, i)? ? ? ? print('Adding run metadata for', i)else:# Record a summarysummary, _ = sess.run([merged, train_step], feed_dict=feed_dict(True))? ? ? ? train_writer.add_summary(summary, i)defmain(_):iftf.gfile.Exists(FLAGS.summaries_dir):? ? tf.gfile.DeleteRecursively(FLAGS.summaries_dir)? tf.gfile.MakeDirs(FLAGS.summaries_dir)? train()if__name__ =='__main__':? tf.app.run()

其中

flags.DEFINE_string('summaries_dir','/tmp/mnist_logs','Summaries directory')

標(biāo)識(shí)了事件文件的輸出路徑。該例中旺芽,輸出路徑為/tmp/mnist_logs

打開(kāi)TensorBoard服務(wù)

tensorboard --logdir=/tmp/mnist_logs/

在瀏覽器中進(jìn)行瀏覽http://0.0.0.0:6006沪猴,在這個(gè)可視化界面中,可以查看tensorflow圖和各種中間輸出等采章。

TensorBoard的不過(guò)是個(gè)調(diào)試工具运嗜,看起來(lái)很酷炫有沒(méi)有,但怎么充分利用悯舟,我想還是要對(duì)tensorflow充分了解担租。下面要轉(zhuǎn)向?qū)ensorflow的學(xué)習(xí)中了。

Error 2 Bug解決

通過(guò)pip方式安裝的tensorflow抵怎,在使用tensorboard的時(shí)候奋救,可能會(huì)出現(xiàn)如下Bug:

WARNING:tensorflow:IOError [Errno2] No suchfileordirectory:'/usr/local/lib/python2.7/dist-packages/tensorflow/tensorboard/TAG'onpath/usr/local/lib/python2.7/dist-packages/tensorflow/tensorboard/TAGWARNING:tensorflow:UnabletoreadTensorBoard tagStarting TensorBoardonport6006

解決方案:

下載tensorflow的github的源代碼,將tensorflow的tensorboard目錄下的TAG文件拷貝到Python下面的tensorboard目錄下即可反惕,我的目錄如下:

sudo cp ~/libsource/tensorflow/tensorflow/tensorflow/tensorboard/TAG/usr/local/lib/python2.7/dist-packages/tensorflow/tensorboard/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尝艘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子姿染,更是在濱河造成了極大的恐慌背亥,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盔粹,死亡現(xiàn)場(chǎng)離奇詭異隘梨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)舷嗡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門轴猎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人进萄,你說(shuō)我怎么就攤上這事捻脖。” “怎么了中鼠?”我有些...
    開(kāi)封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵可婶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我援雇,道長(zhǎng)矛渴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮具温,結(jié)果婚禮上蚕涤,老公的妹妹穿的比我還像新娘。我一直安慰自己铣猩,他們只是感情好揖铜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著达皿,像睡著了一般天吓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峦椰,一...
    開(kāi)封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天龄寞,我揣著相機(jī)與錄音,去河邊找鬼们何。 笑死萄焦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冤竹。 我是一名探鬼主播拂封,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鹦蠕!你這毒婦竟也來(lái)了冒签?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钟病,失蹤者是張志新(化名)和其女友劉穎萧恕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肠阱,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡票唆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屹徘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片走趋。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖噪伊,靈堂內(nèi)的尸體忽然破棺而出簿煌,到底是詐尸還是另有隱情,我是刑警寧澤鉴吹,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布姨伟,位于F島的核電站,受9級(jí)特大地震影響豆励,放射性物質(zhì)發(fā)生泄漏夺荒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望般堆。 院中可真熱鬧在孝,春花似錦诚啃、人聲如沸淮摔。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)和橙。三九已至,卻和暖如春造垛,著一層夾襖步出監(jiān)牢的瞬間魔招,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工五辽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留办斑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓杆逗,卻偏偏與公主長(zhǎng)得像乡翅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罪郊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容