1. 程式人生 > >跑深度學習網路時碰到的一些問題記錄

跑深度學習網路時碰到的一些問題記錄

分兩部分記錄:

一.日誌資訊

二.程式語言

#############################################################################

一.日誌資訊

    在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.