日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unet项目解析(7): 模型编译-优化函数、损失函数、指标列表

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unet项目解析(7): 模型编译-优化函数、损失函数、指标列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目GitHub主頁:https://github.com/orobix/retina-unet

參考論文:Retina blood vessel segmentation with a convolution neural network (U-net)


1. 模型編譯

model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])

在訓練模型之前,需要通過compile來對學習過程進行配置。compile接收三個參數:

  • 優化器optimizer:指定為已預定義的優化器名,如rmsprop、adagrad,或一個Optimizer類的對象
  • 損失函數loss:最小化的目標函數,為預定義的損失函數名,如categorical_crossentropy、mse,也可以為一個損失函數
  • 指標列表metrics:對分類問題,一般設置為metrics=['accuracy']。指標可以是一個預定義指標的名字,也可以是一個用戶定制的函數.指標函數應該返回單個張量,或一個完成metric_name - > metric_value映射的字典.
如果只是載入模型并利用其predict,可以不用進行compile。在Keras中,compile主要完成損失函數和優化器的一些配置,是為訓練服務的。predict會在內部進行符號函數的編譯工作(通過調用_make_predict_function生成函數),

2. 優化器optimizer

優化器是編譯Keras模型必要的兩個參數之一。

調用方法:

# 調用model.compile()之前初始化一個優化器對象,然后傳入該函數: sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='mean_squared_error', optimizer=sgd)#在調用model.compile()時傳遞一個預定義優化器名 model.compile(loss='mean_squared_error', optimizer='sgd')

經常使用的優化器:

1. SGD:隨機梯度下降法,支持動量參數,支持學習衰減率,支持Nesterov動量

keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False) # lr:大或等于0的浮點數,學習率 # momentum:大或等于0的浮點數,動量參數 # decay:大或等于0的浮點數,每次更新后的學習率衰減值 # nesterov:布爾值,確定是否使用Nesterov動量

2.?RMSprop:該優化器通常是面對遞歸神經網絡時的一個良好選擇,除學習率可調整外,建議保持優化器的其他默認參數不變

keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-06) # lr:大或等于0的浮點數,學習率 # rho:大或等于0的浮點數 # epsilon:大或等于0的小浮點數,防止除0錯誤3. Adagrad:建議保持優化器的默認參數不變 keras.optimizers.Adagrad(lr=0.01, epsilon=1e-06) # lr:大或等于0的浮點數,學習率 # epsilon:大或等于0的小浮點數,防止除0錯誤

4.?Adadelta:建議保持優化器的默認參數不變

keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=1e-06) # lr:大或等于0的浮點數,學習率 # rho:大或等于0的浮點數 # epsilon:大或等于0的小浮點數,防止除0錯誤5.?Adam: keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08) # lr:大或等于0的浮點數,學習率 # beta_1/beta_2:浮點數, 0<beta<1,通常很接近1 # epsilon:大或等于0的小浮點數,防止除0錯誤

6.?Nadam:Nesterov Adam optimizer: Adam本質上像是帶有動量項的RMSprop,Nadam就是帶有Nesterov 動量的Adam RMSprop

keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=1e-08, schedule_decay=0.004) # lr:大或等于0的浮點數,學習率 # beta_1/beta_2:浮點數, 0<beta<1,通常很接近1 # epsilon:大或等于0的小浮點數,防止除0錯誤

3. 損失函數loss

目標函數,或稱損失函數,是編譯一個模型必須的兩個參數之一。

可以通過傳遞預定義目標函數名字指定目標函數,也可以傳遞一個Theano/TensroFlow的符號函數作為目標函數,該函數對每個數據點應該只返回一個標量值,并以下列兩個參數為參數:

  • y_true:真實的數據標簽,Theano/TensorFlow張量
  • y_pred:預測值,與y_true相同shape的Theano/TensorFlow張量
真實的優化目標函數是在各個數據點得到的損失函數值之和的均值

3.1 封裝好的目標函數

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:即預測值與真實標簽的余弦距離平均值的相反數

具體的實現,可以參考Coffee的博文。

3.2 自定義的目標函數

from keras import backend as Kdef my_loss(y_true,y_pred):return K.mean((y_pred-y_true),axis = -1) model.compile(loss=my_loss,optimizer='SGD',metrics=['accuracy'])

4. 性能評估函數

性能評估模塊提供了一系列用于模型性能評估的函數,這些函數在模型編譯時由metrics關鍵字設置。

性能評估函數類似與目標函數, 只不過該性能的評估結果講不會用于訓練.

# 可以通過字符串來使用域定義的性能評估函數 model.compile(loss='mean_squared_error',optimizer='sgd',metrics=['mae', 'acc'])# 也可以自定義一個Theano/TensorFlow函數并使用之 from keras import metrics model.compile(loss='mean_squared_error', optimizer='sgd', metrics=[metrics.mae, metrics.categorical_accuracy])

4.1 預定義評估函數

binary_accuracy: 對二分類問題,計算在所有預測值上的平均正確率 categorical_accuracy:對多分類問題,計算再所有預測值上的平均正確率 sparse_categorical_accuracy:與categorical_accuracy相同,在對稀疏的目標值預測時有用 top_k_categorical_accracy: 計算top-k正確率,當預測值的前k個值中存在目標類別即認為預測正確 sparse_top_k_categorical_accuracy:與top_k_categorical_accracy作用相同,但適用于稀疏情況

4.2 自定義評估函數

定制的評估函數可以在模型編譯時傳入,該函數應該以(y_true, y_pred)為參數。

(y_true, y_pred) as arguments and return a single tensor value. import keras.backend as K def mean_pred(y_true, y_pred):return K.mean(y_pred) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy', mean_pred])

總結

以上是生活随笔為你收集整理的Unet项目解析(7): 模型编译-优化函数、损失函数、指标列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。