天天看點

​DL_WITH_PY系統學習(第3章)

​DL_WITH_PY系統學習(第3章)

本節提示:

1、DL的核心建構

2、Keras的簡單介紹

3、搭建DL機器訓練環境

4、使用DL模型解決基礎問題

3.1 DL的基本建構:layer

layer的定義:以1個或多個tensor作為輸入,并且運算出來1個或者多個tensor作為輸出的資料處理模型。

from keras import models from keras import layters model = models.Sequentail() model.add(layers.Dense(32,input_shape=(784,))) model.add(layers.Dense(32))

在這樣的代碼中,第二層的layer自動以前一層的結果大小為輸入大小。

3.2 DL的基本建構:model

model的定義:一個DL的model是一個直接的、非循環的layer的圖,是最直接的layers的線性表示方式,單輸入并且但輸出。

model包含squence和model兩種模式,這在之前已經讨論過。

3.3 DL的基本建構:loss function和optimizers

loss function:它表示的是目前訓練項目的成功率;

optimizers:    表示,基于目前的loss function,目前的網絡采取什麼樣的方法優化。主要是展現在SGD的具體變化上。

對于不同類型的訓練,往往都有預設的很好的optimizers選擇,隻有當你進行專門的訓練的時候,才可能需要采用自己定義的方法。

3.4 DL訓練的步驟

3.4.1 定義你的資料集

3.4.2 選擇一種layers的組合方式(選擇model)

3.4.3 config選擇的的model

3.4.4 訓練,并且得到結果

在定義的過程中,有一些思考:

a、為什麼要使用激活層

否則,原系統就是原始的線性系統,缺乏靈活性。

b、關于損失函數的選擇

如果你使用的是binary函數,則

loss='binary_crossentropy'

當你想使用自定義的時候,嘗試這個

model.

compile

(optimizer=optimizers.RMSprop(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])

實際上,很多時候,RMSprop都是一個不錯的選擇。

3.5 fit()傳回的是log,它是一個hash,類似這種結構

['acc','loss','val_acc','val_loss']

3.6 predict

model.predict(x_test)

是對目前一個輸入測試用例的實驗。

3.7 關于compile中參數的選擇,這塊的概論非常重要又很模糊

一個典型的compile主要解決3個問題:

optimizer是什麼,loss是什麼,metrics是什麼。而這3個參數的選擇,往往都和問題本身有關:

optimizer:優化器,為預定義優化器名或優化器對象

常見的目标函數

rmsprop:絕大多數情況下都是可用的,該優化器通常是面對遞歸神經網絡時的一個良好選擇

sgd:(似乎也是可以的)随機梯度下降法,支援動量參數,支援學習衰減率,支援Nesterov動量

loss:( categorical:絕對的;cross entropy 交叉熵)

categorical_crossentropy 最好的選擇,onehot

sparse_categorical_crossentropy 當你的标簽是integer的時候,選擇

binary_crossentropy 2類分類的時候,選擇

mse mean squared error 當你的問題是回歸問題的時候選擇(regression)

而mae為 mean absolute error ,能夠隻管地顯示出你在什麼時候出現overfit

可用的目标函數

  • mean_squared_error或mse
  • mean_absolute_error或mae
  • mean_absolute_percentage_error或mape
  • mean_squared_logarithmic_error或msle
  • squared_hinge
  • hinge
  • categorical_hinge
  • binary_crossentropy(亦稱作對數損失,logloss)
  • logcosh
  • categorical_crossentropy:亦稱作多類的對數損失,注意使用該目标函數時,需要将标簽轉化為形如

    (nb_samples, nb_classes)

    的二值序列
  • sparse_categorical_crossentrop:如上,但接受稀疏标簽。注意,使用該函數時仍然需要你的标簽與輸出值的次元相同,你可能需要在标簽資料上增加一個次元:

    np.expand_dims(y,-1)

  • kullback_leibler_divergence:從預測值機率分布Q到真值機率分布P的資訊增益,用以度量兩個分布的差異.
  • poisson:即

    (predictions - targets * log(predictions))

    的均值
  • cosine_proximity:即預測值與真實标簽的餘弦距離平均值的相反 

metrics(清單,包含評估模型在訓練和測試時的性能的名額)

acc和accuracy,似乎是一個東西,或者metrics={'ouput_a': 'accuracy'}

3.8 平滑繪制最後的曲線

plt.plot(range(1,len(average_mae_history)+1),average_mae_history)到

def smooth_curve(points,factor=0.9)

    smoothed_points = []

       for point in points:

          if smoothed_points:

             previous = smoothed_points[-1]

             smoothed_points.append(previous*factor+point*(1-factor))

           else:

              smothed_points.append(point)

     return smoothed_points

應該是有方法的,但是也是要到了多個epoch的時候才會出現這個問題。

來自為知筆記(Wiz)

目前方向:圖像拼接融合、圖像識别

聯系方式:[email protected]

繼續閱讀