在定義網絡模型時,需要可視化的目標變量可以通過tf.summary添加。
(1)tf.summary.scalar
顯示標量信息,主要用於記錄諸如:準確率、損失和學習率等單個值的變化趨勢。
代碼示例:
tf.summary.scalar(『loss』 , loss)tf.summary.scalar('accuracy', accuracy)(2)tf.summary.histogramr:
顯示參數分布直方圖,如卷積核參數。
代碼示例:
tf.summary.histogram(『conv1』 , w_conv1)(3)tf.summary.image:
接收一個tensor,顯示圖像信息,如特徵圖和卷積核,默認顯示最新的圖像信息。
代碼示例:
tf.summary.image(『feature』 , feature_map)tf.summary.image('w_conv1', w_conv1_visual_0)tf.summary.image('x_input' , x_input, 6)(4)tf.summary.FileWriter:
生成日誌, 指定一個目錄來告訴程序把文件放到哪裡。然後運行的時候使用add_summary()來將某一步的summary數據記錄到文件中。
代碼示例:
tf.summary.FileWriter('logs/', sess.graph, flush_secs = 10)(5)tf.summary.merge_all:
整理日誌的操作,sess.run一次就不用對上述分別run。代碼示例:
sess.run(tf.global_variables_initializer())merged = tf.summary.merge_all()def inf(self, x): x_input = tf.reshape(x, [-1, 28, 28, 1])
tf.summary.image('x_input', x_input, 6) with tf.name_scope('1st_layer'): w_conv1 = tf.get_variable('w_conv1', [3, 3, 1, 20]) w_conv1_visual_0 = tf.reshape(w_conv1[:,:,:,0], [1, 3, 3, 1]) w_conv1_visual_1 = tf.reshape(w_conv1[:,:,:,1], [1, 3, 3, 1]) w_conv1_visual_2 = tf.reshape(w_conv1[:,:,:,2], [1, 3, 3, 1])
tf.summary.image('w_conv1', w_conv1_visual_0) tf.summary.image('w_conv1', w_conv1_visual_1) tf.summary.image('w_conv1', w_conv1_visual_2)
tf.summary.histogram('w_conv1', w_conv1) b_conv1 = tf.get_variable('b_conv1', [20]) tf.summary.histogram('b_conv1', b_conv1) h_conv1 = tf.nn.relu(self.conv2d(x_input, w_conv1) + b_conv1) h_pool1 = self.max_pool_2x2(h_conv1)
tf.summary.image('h_pool1', h_pool1[:,:,:,:1], 6)定義網絡過程中可以通過tf.name_scope()來劃分網絡模塊,使得可視化結果可以分塊展示,效果較為清晰。
代碼示例:
with tf.name_scope('2nd_layer'): w_conv2 = tf.get_variable('w_conv2', [3, 3, 20, 40]) b_conv2 = tf.get_variable('b_conv2', [40]) h_conv2 = tf.nn.relu(self.conv2d(h_pool1, w_conv2) + b_conv2) h_pool2 = self.max_pool_2x2 (h_conv2) tf.summary.image('h_pool2', h_pool2[:,:,:,:1], 6)
with tf.name_scope('fc_layers'): w_fc1 = tf.get_variable('w_fc1', [7 * 7 * 40, 1024]) b_fc1 = tf.get_variable('b_fc1', [1024]) h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 40]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1)