跑深度學習網路時碰到的一些問題記錄
分兩部分記錄:
一.日誌資訊
二.程式語言
#############################################################################
一.日誌資訊
在TRAIN_DIR路徑下會產生四種檔案:
1.checkpoint:文字檔案,包含所有model.ckpt-xxxx,相當於是不同時間節點生成的所有ckpt檔案的一個索引。
2.model.ckpt-2124.data-000000-of-000001:模型檔案,儲存模型的權重
3.model.ckpt-2124.meta: 圖檔案,儲存模型的網路圖
4.model.ckpt-2124.index: 這個不清楚
5.graph.pbtxt: 用protobuf格式儲存的模型的圖
Tensorflow使用五個不同級別的日誌訊息。按照上升的順序,它們是DEBUG,INFO,WARN,ERROR和FATAL。當在任何這些級別配置日誌記錄時,Tensorflow將輸出與該級別相對應的所有日誌訊息以及所有級別的嚴格級別。例如,如果設定了ERROR的日誌記錄級別,則會收到包含ERROR和FATAL訊息的日誌輸出,如果設定了一個DEBUG級別,則會從所有五個級別獲取日誌訊息。
預設情況下,Tensorflow在WARN的日誌記錄級別進行配置,但是在跟蹤模型訓練時,需要將級別調整為INFO,tf.logging.set_verbosity(tf.logging.INFO)
二.程式語言
1.join 和 os.path.join函式
join:用於合併字串陣列
os.path.join:用於合併多個路徑
import os
dataset_dir = '.'
file_pattern = 'fgvc_%s.tfrecord'
split_name = 'train'
a = os.path.join(dataset_dir, file_pattern % (split_name))
print a #./fgvc_train.tfrecord
2.tf.expand_dims 和 tf.squeeze
tf.expand_dims: 用於增加維度(
import tensorflow as tf
a = tf.constant([[1,2,3],[4,5,6]])
with tf.Session() as sess:
print sess.run(a)
'''
[[1 2 3]
[4 5 6]]
'''
print tf.shape(a)
'''
Tensor("Shape_5:0", shape=(2,), dtype=int32)
'''
a_1 = tf.expand_dims(a,0)
print sess.run(a_1)
'''
[[[1 2 3]
[4 5 6]]]
'''
print tf.shape(a_1)
'''
Tensor("Shape_6:0", shape=(3,), dtype=int32)
'''
a_2 = tf.expand_dims(a,-1)
print sess.run(a_2)
'''
[[[1]
[2]
[3]]
[[4]
[5]
[6]]]
'''
print tf.shape(a_2)
'''
Tensor("Shape_7:0", shape=(3,), dtype=int32)
'''
a_3 = tf.expand_dims(a,1)
print sess.run(a_3)
'''
[[[1 2 3]]
[[4 5 6]]]
'''
print tf.shape(a_3)
'''
Tensor("Shape_8:0", shape=(3,), dtype=int32)
'''
tf.squeeze:減少多餘的維度
import tensorflow as tf
a = tf.constant([[1]])
b = tf.constant([[[1,2],[3,4]]])
with tf.Session() as sess:
print sess.run(a) #[[1]]
print sess.run(tf.squeeze(a)) # 1
print sess.run(b)
'''
[[[1 2]
[3 4]]]
'''
print sess.run(tf.squeeze(b))
'''
[[1 2]
[3 4]]
'''
3.tf.cast 函式
用法:tf. cast(x, dtype, name=None)
作用:將x的資料格式轉化成dtype.
import tensorflow as tf
a = tf.constant([[1.2]])
b = tf.constant([[[1,2],[3,4]]])
with tf.Session() as sess:
print sess.run(a) #[[1.2]]
print sess.run(tf.cast(a, tf.int32))# [[1]]
dtype類別有:tf.bool, tf.int32, tf.int64, tf.float32, tf.float64等
4.將Tensor張量轉化為numpy陣列
注:tensorflow裡面不能將張量轉化成矩陣後用numpy計算,因為numpy裡不能實現梯度反傳。
5.不能用for迴圈遍歷圖片的所有畫素點,這樣會導致op節點爆炸。
6.如果採用tf.initialize_all_variables().run(),所有權重都將初始化,如果只訓練某一層權重則不應用這句命令。
7.tf查詢元素相關程式 點選開啟連結
8.tf.matmul與tf.multiply
tf.matmul:矩陣乘法
tf.multiply:element-wise。對應元素相稱,如兩個矩陣的第一行第一列相乘。
9.tf.shape(a) 和a.get_shape()
10.tf.argmax 返回最大值的下標
tf.argmax( ,axis = 0) 縱向比較
tf.argmax( , axis = 1) 橫向比較
11.