神經網路的訓練中要計算驗證集的損失函式嗎?

時間 2021-05-30 09:11:03

1樓:鄧冇

個人理解是驗證集的選取是用來挑選模型的,比如在比賽中,我現在訓練了10個模型,我怎麼確定哪個更好呢,就是通過驗證集。但是簡單切分訓練集和驗證集會使得訓練集的數量減少,這時可以考慮採用交叉驗證。

2樓:檸檬陳

我感覺驗證集的作用是乙個體驗當前訓練得到的model好壞的乙個「視覺化」指標。上面的答主也說了它的可以用來幫助調整lr之類的超參。不會進入loss優化bp之類的。。

如果也對驗證集的loss優化,它不就變成train了~~~

3樓:husencd

@王贇 Maigo @子不語的回答解釋的很清楚了.可以不計算驗證集上的loss,驗證集上的loss不會參與模型的訓練;不過,和validation accuracy一樣,可以通過觀察validation loss的下降趨勢來調整學習率和訓練輪數等超引數.

題主提到pytorch,pytorch裡面有乙個學習率調整策略:torch.optim.

lr_scheduler.ReduceLROnPlateau(),摘錄了部分文件如下:

class

ReduceLROnPlateau

(object

):"""Reduce learning rate when a metric has stopped improving.

Models often benefit from reducing the learning rate by a factor

of 2-10 once learning stagnates. This scheduler reads a metrics

quantity and if no improvement is seen for a 'patience' number

of epochs, the learning rate is reduced.

Example:

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)

>>> scheduler = ReduceLROnPlateau(optimizer, 'min')

>>> for epoch in range(10):

>>> train(...)

>>> val_loss = validate(...)

>>> # Note that step should be called after validate()

>>> scheduler.step(val_loss)

"""這裡可以通過計算validation loss,來自動地調整學習率.

4樓:王贇 Maigo

在訓練過程中需要用驗證集上的某個指標來調整學習率等引數,這個指標一般用驗證集上的準確率,此時不需要計算驗證集上的損失函式。但當驗證集不夠大的時候,準確率的波動可能太過劇烈,此時也可以用驗證集上的損失函式作為調整學習率等引數的指標。

在神經網路訓練初期,訓練集和驗證集loss是這種曲線正常嗎

hsyoung 基本上是正常的,對於選擇了合適的loss function的情況下,loss曲線都會逐漸收斂,只是速度上會有差異。對於在訓練過程中引入驗證集後,loss有可能公升高,如果跑一遍 N個epoch之後 如果loss平均仍然很高,此時需要調整超引數,在原來已訓練好的網路的基礎上再跑一次訓練...

怎樣克服神經網路訓練中argmax的不可導性?

章浩 一句話解釋 正向傳播就和往常一樣,反向傳播時,將梯度從不可導那個點copy到不可導點的前面的最近乙個可導點。請看紅線右端點的梯度,跳過中間的字典模組,直達紅線的左端點 問題來了 1 梯度鏈條怎麼隔斷不讓他經過字典模組?pytorch有個 detach 可以隔斷梯度,梯度就不會進入不可導區域引發...

怎麼選取訓練神經網路時的Batch size

嚮往自由 乙個epoch,使用大batch,訓練時間更短 但收斂不一定比小batch好 解析為什麼同乙個epoch,小batch,收斂更快?原因 相同epoch,小batch的梯度迭代更加頻繁,更有可能找到最優解。因此,不是batch越大越好 做自己 我覺得和隨機性大小有關,批梯度下降本身屬於隨機優...