[英]Sparse Categorical Crossentropy Loss Seems Scaled Really High, Despite Very Successful Model
我正在使用 Tensorflow 在專有數據上訓練一些CNN
網絡。 我們有大量的數據,而且這些模型似乎能夠學習大量關於數據分類的信息(到目前為止都是二進制分類)。
有時,訓練/測試准確度曲線可能非常好,在某些情況下高達 95%。 然而,損失函數在規模方面是可疑的。 從視覺上看,它們看起來不錯,以及我對表現良好的期望如何,但這不是正確的數量級。
誰能告訴我這種縮放通常如何在 TF/Keras 中適當地完成? 我對這些模型很有信心,因為它們已經在其他數據集上進行了測試並且泛化得很好,但是 function 的螺旋損失並不是很好報告。
學習率大約為 0.0001。 L1
和L2
使用相同的 lambda 值,我在提供給 model 時最成功的值介於 0.01 和 0.03 之間。 我目前沒有使用任何輟學。
我包括了一個特別高變異精度運行的照片。 情況並非總是如此,但有時確實會發生。 我懷疑這個問題部分是由於異常數據,或者可能是正則化值。
以下是相關的代碼片段。
model = tf.keras.models.Sequential()
if logistic_regression is not True:
for i in range(depth):
# 1
model.add(Conv2D(
15,
kernel_size=(10, 3),
strides=1,
padding='same',
activation='relu',
data_format='channels_last',
kernel_regularizer=tf.keras.regularizers.l1_l2(
l1=regularizer_param,
l2=regularizer_param)
))
model.add(MaxPooling2D(
pool_size=(3, 3),
strides=1,
padding='valid',
data_format='channels_last'))
model.add(BatchNormalization())
if dropout is not None:
model.add(Dropout(dropout))
# flatten
model.add(Flatten(data_format='channels_last'))
model.add(Dense(
len(self.groups),
# use_bias=True if initial_bias is not None else False,
# bias_initializer=initial_bias
# if initial_bias is not None
# else None,
kernel_regularizer=tf.keras.regularizers.l1_l2(
l1=regularizer_param,
l2=regularizer_param)
))
model.compile(
optimizer=tf.keras.optimizers.Adagrad(
learning_rate=learning_rate,
initial_accumulator_value=0.1,
epsilon=1e-07,
name='Adagrad'),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
您不必擔心 function 值的損失規模。 請記住,損失 function 只是衡量網絡距離的一個指標。 但是,您始終可以按自己喜歡的方式擴展它。 不同時期的損失趨勢有什么關系? 你希望它是一個平穩的下降,這就是你的第二個數字所顯示的。
損失就是這樣:對於同一網絡,對於同一數據集,僅在相對意義上才有意義的任意數字。 它沒有其他意義。 事實上,損失與指標也不能很好地對應:參見 Huang et al., 2019。
因為它們已經在其他數據集上進行了測試並且泛化得非常好,
這才是最重要的。
但令人費解的損失 function 並不是很好報告。
您可以將這些損失擴大 1,000。 它們僅在相對意義上有意義。
參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.