簡體   English   中英

盡管 Model 非常成功,但稀疏分類交叉熵損失的規模似乎確實很高

[英]Sparse Categorical Crossentropy Loss Seems Scaled Really High, Despite Very Successful Model

我正在使用 Tensorflow 在專有數據上訓練一些CNN網絡。 我們有大量的數據,而且這些模型似乎能夠學習大量關於數據分類的信息(到目前為止都是二進制分類)。

有時,訓練/測試准確度曲線可能非常好,在某些情況下高達 95%。 然而,損失函數在規模方面是可疑的。 從視覺上看,它們看起來不錯,以及我對表現良好的期望如何,但這不是正確的數量級。

誰能告訴我這種縮放通常如何在 TF/Keras 中適當地完成? 我對這些模型很有信心,因為它們已經在其他數據集上進行了測試並且泛化得很好,但是 function 的螺旋損失並不是很好報告。

學習率大約為 0.0001。 L1L2使用相同的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM