
本節提示:
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]