keras自定義損失函數(shù) 通用優(yōu)化算法有哪些比SGD更好用,且有理論依據(jù)的?
通用優(yōu)化算法有哪些比SGD更好用,且有理論依據(jù)的?瀉藥。事實上,沒有一種通用的優(yōu)化算法可以解決任何真正意義上的問題,也稱為無免費午餐定理。讓我們討論與SGD相同的條件(目標(biāo)函數(shù)是凸的,梯度的變化率是有
通用優(yōu)化算法有哪些比SGD更好用,且有理論依據(jù)的?
瀉藥。
事實上,沒有一種通用的優(yōu)化算法可以解決任何真正意義上的問題,也稱為無免費午餐定理。
讓我們討論與SGD相同的條件(目標(biāo)函數(shù)是凸的,梯度的變化率是有界的,并且沒有約束),但是更快的算法(自適應(yīng)Adam被視為SGD的一個簡單變體,不進(jìn)行討論)。常用的方法有saga法和隨機牛頓法。速度會更快,而且單個實際計算的成本也會增加,所以我們需要在實際問題中考慮權(quán)衡
如果我們想用更少的代碼以盡可能快的速度建立和測試神經(jīng)網(wǎng)絡(luò),keras是最快的,而且序列API和model的功能非常強大。而且keras的設(shè)計非常人性化。以數(shù)據(jù)輸入和輸出為例,與keras的簡單操作相比,tensorflow編譯碼的構(gòu)造過程非常復(fù)雜(尤其對于初學(xué)者來說,大量的記憶過程非常痛苦)。此外,keras將模塊化作為設(shè)計原則之一,用戶可以根據(jù)自己的需求進(jìn)行組合。如果你只是想快速建立通用模型來實現(xiàn)你的想法,keras可以是第一選擇。
但是,包裝后,keras將變得非常不靈活,其速度相對較慢。如果高度包裝,上述缺點將更加明顯。除了一些對速度要求較低的工業(yè)應(yīng)用外,由于tensorflow的速度較高,因此會選擇tensorflow
如果您在驗證您的想法時,想定義損失函數(shù)而不是使用現(xiàn)有的設(shè)置,與keras相比,tensorflow提供了更大的個性空間。此外,對神經(jīng)網(wǎng)絡(luò)的控制程度將在很大程度上決定對網(wǎng)絡(luò)的理解和優(yōu)化,而keras提供的權(quán)限很少。相反,tensorflow提供了更多的控制權(quán),比如是否訓(xùn)練其中一個變量、操作梯度(以獲得訓(xùn)練進(jìn)度)等等。
盡管它們都提供了深度學(xué)習(xí)模型通常需要的功能,但如果用戶仍然追求一些高階功能選擇,例如研究特殊類型的模型,則需要tensorflow。例如,如果您想加快計算速度,可以使用tensorflow的thread函數(shù)來實現(xiàn)與多個線程的相同會話。此外,它還提供了調(diào)試器功能,有助于推斷錯誤和加快操作速度。