机器学习模型中step与epoch,batch_size之间的关系
本文主要談?wù)勛约簩tep,epoch,batch_size這幾個常見參數(shù)的理解。
最近在調(diào)試模型的時候,發(fā)現(xiàn)在使用keras.optimizer.adam時,模型在添加了新的一層2D卷積層后難以收斂,在不調(diào)整初始權(quán)重矩陣的情況下,想通過衰減學(xué)習(xí)率來使loss function的收斂性更好。
可以看到,adam這個optimizer在沒有其他參數(shù)條件的情況下,默認(rèn)學(xué)習(xí)率為固定0.001。
為了調(diào)整學(xué)習(xí)率,在keras的文檔中找到了下述示例代碼,代碼的意思很簡單,初始學(xué)習(xí)率為0.01,衰減需要的step為10000,衰減率為0.9,即每次經(jīng)過10000 steps,學(xué)習(xí)率就衰減為原來的0.9。
lr_schedule = keras.optimizers.schedules.ExponentialDecay(initial_learning_rate=1e-2,decay_steps=10000,decay_rate=0.9) optimizer = keras.optimizers.SGD(learning_rate=lr_schedule)那么這里的step和我們在編譯模型時選的epoch與batch_size有什么關(guān)系呢。
需要理解的是,在訓(xùn)練模型的過程中,一個step其實指的就是一次梯度更新的過程。例如在每個epoch中有2000個用于訓(xùn)練的圖片,我們選取了batch_size=100,那么我們就需要2000 images / 100 (images/step) = 20 steps來完成這個epoch。
換個角度,從神經(jīng)網(wǎng)絡(luò)的角度來說,我們都知道機(jī)器學(xué)習(xí)的最終目的,就是最小化Loss function損失函數(shù)。L(W)=1K∑t=1Kl(yt,ytetoile)L(W) = \frac{1} {K}\sum_{t=1}^{K}l(y_t,y_{t_{etoile}})L(W)=K1?∑t=1K?l(yt?,ytetoile??)。 我們會發(fā)現(xiàn)這里的loss function 是K組訓(xùn)練數(shù)據(jù)的平均誤差,這里的K其實就是我們在訓(xùn)練模型時選擇的batch_size,即將多個訓(xùn)練數(shù)據(jù)整合到一起,再通過最小化他們的平均誤差來優(yōu)化權(quán)重矩陣。那么經(jīng)過每個batch_size的訓(xùn)練,我們計算梯度,更新權(quán)重的過程就稱為一個step。
有了對于step的更深刻的認(rèn)識,我們就可以輕松地根據(jù)step自行調(diào)整學(xué)習(xí)率了。
總結(jié)
以上是生活随笔為你收集整理的机器学习模型中step与epoch,batch_size之间的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Anaconda安装tensorflow
- 下一篇: unity如何让canvas总是显示在所