1.損失函式後面的epoch中出現劇烈的抖動,如下圖所示,說明你的學習率在此時比較高,需要進行學習率的衰減。
2.損失函式在剛開的時候抖動,並且隨著epoch的增加損失函式保持在一定的範圍內,說明你的學習率比較大。
3.損失函式減少的比較緩慢,說明你的學習率比較小。
有關學習率的影響具體如下文的連線所示:
4.遷移學習的具體情況如下:
øcnn feature + classifier;這個比較好理解,通常做法就是在大的資料集(比如imagenet)上訓練出乙個cnn,然後提取最後一層卷積層或者倒數第二層全連線層的輸出作為cnn 特徵,然後直接使用 svm、貝葉斯或softmax等分類器進行分類;
øfine-tuning:將在大資料集上訓練得到的weights作為特定任務(小資料集)的初始化權重,重新訓練該網路(根據需要,修改全連線層輸出);至於訓練的方式可以是:1.微調所有層2.固定網路前面幾層權重,只微調網路的後面幾層,這樣做有兩個原因:a. 避免因資料量小造成過擬合現象;b.cnn前幾層的特徵中包含更多的一般特徵(比如,邊緣資訊,色彩資訊等),這對許多任務來說是非常有用的,但是cnn後面幾層的特徵學習注重高層特徵,也就是語義特徵,這是針對於資料集而言的,不同的資料集後面幾層學習的語義特徵也是完全不同的;
在進行微調網路並僅訓練網路後幾層的時候,需要指定這幾層的訓練引數,否則會出現損失函式一直減小,準確率先增大後減小,但是在tensorboard上無法正確顯示的情況,具體實現如下(總覺得這種解決方法比較牽強):
var_list = [v for v in tf.trainable_variables() if v.name.split('/')[0] in train_layers]
train_op = tf.train.adamoptimizer(lr).minimize(loss, var_list=var_list, global_step=global_step)
後來發現,如果微調網路並訓練全部網路層數時,調整好學習率即可解決上面的問題:
var_list = [v for v in tf.trainable_variables()]
train_op = tf.train.adamoptimizer(lr).minimize(loss, var_list=var_list, global_step=global_step)
5.訓練集準確率低於驗證集準確率10%,一開始總覺得是自己**的問題,除錯了好久,訓練集的準確率還是低,最後換了乙個資料集訓練集和準確率才正常,最後經驗證發現是資料集中資料和標籤沒有一一對應好,修改之後即可
6.訓練集的loss先下降後上公升,該類問題的原因有多種,主要的解決辦法如下:
7.驗證集的loss先下降後上公升,可考慮此時模型已經過擬合了
8.改變優化器後,loss一直不收斂,可嘗試使用降低學習率的方法
持續更新中......
機器 深度 學習入門3000問(龜速持續更新)
1.使用python中 os.listdir 發現mac隱藏資料夾.ds store造成的報錯 問 如何 or如何在程式中去除.ds store的影響?參考 2.如何設定終端的初始執行位置?答 1.版本 1.需要配置多種環境麼?答 需要,方便管理需要不同python版本的不同專案。2.jupyter...
機器學習和深度學習入門總結
本菜鳥入門機器學習也有一段時間了,有那麼一丟丟的感悟,在這裡做一點總結。介紹一下機器學習理論和實踐的學習心得。高數 線性代數這就沒啥好說的,就是大學工科的必修科目。李航的藍皮書和周志華的西瓜書可以說是國內的比較經典的教材,這兩位也是國內人工智慧領域的領軍人物。前面推薦的書籍,雖然算得上入門教材,但可...
03 機器學習 深度學習該怎樣入門?
我本科是個和計算機 數學毫不相關的人文類專業,後來用了大 三 大四兩年時間,從中學級別的數學撿起,一路自學 實習 讀研到現在。我太熟悉入門時候的坑了,直接從一大堆概念 公式 書單入手,誰看誰懵。所謂入門,絕不是粘課程鏈結 講概念定義。有些答案確實解釋的非常通俗,但這不叫入門。古語說入門,就一句話 師...