繁体   English   中英

为什么我的损失和准确度图有点不稳定?

[英]why my loss and accuracy plots are slightly shaky?

我构建了一个 Bi-LSTM 模型,它试图根据给定的单词预测某些类别。 例如,单词“smile”应由“friendly”预测。

但是,经过训练后,每10个类别100个样本(共1000个)的模型,在绘制accuracy和loss时,这两个连续略有抖动。 为什么会出现这种情况? 增加样本数量会导致欠拟合。

模型

def build_model(vocab_size, embedding_dim=64, input_length=30):
    print('\nbuilding the model...\n')

    model = tf.keras.Sequential([
        tf.keras.layers.Embedding(input_dim=(vocab_size + 1), output_dim=embedding_dim, input_length=input_length),
        tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(rnn_units, return_sequences=True, dropout=0.2)),
        tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(rnn_units, return_sequences=True, dropout=0.2)),
        tf.keras.layers.GlobalMaxPool1D(),
        tf.keras.layers.Dropout(0.1),
        tf.keras.layers.Dense(64, activation='tanh', kernel_regularizer=tf.keras.regularizers.L2(l2=0.01)),
        
        # softmax output layer
        tf.keras.layers.Dense(10, activation='softmax')
    ])

    # optimizer & loss
    opt = 'RMSprop' #tf.optimizers.Adam(learning_rate=1e-4)
    loss = 'categorical_crossentropy'

    # Metrics
    metrics = ['accuracy', 'AUC','Precision', 'Recall']

    # compile model
    model.compile(optimizer=opt, 
                  loss=loss,
                  metrics=metrics)
    
    model.summary()

    return model

训练

def train(model, x_train, y_train, x_validation, y_validation,
          epochs, batch_size=32, patience=5, 
          verbose=2, monitor_es='accuracy', mode_es='auto', restore=True,
          monitor_mc='val_accuracy', mode_mc='max'):
    
    # callback
    early_stopping = tf.keras.callbacks.EarlyStopping(monitor=monitor_es,
                                                      verbose=1, mode=mode_es, restore_best_weights=restore,
                                                      min_delta=1e-3, patience=patience)
    
    model_checkpoint = tf.keras.callbacks.ModelCheckpoint('tfjsmode.h5', monitor=monitor_mc, mode=mode_mc,      
                                                          verbose=1, save_best_only=True)

    keras_callbacks = [early_stopping, model_checkpoint]

    # train model
    history = model.fit(x_train, y_train,
                        batch_size=batch_size, epochs=epochs, verbose=verbose,
                        validation_data=(x_validation, y_validation),
                        callbacks=keras_callbacks)
    return history

准确性和损失

在此处输入图片说明

在此处输入图片说明

批量大小

目前批量大小设置为 16,如果我将批量大小增加到 64,每个类别有 2500 个样本,最终图将导致欠拟合。

在此处输入图片说明 在此处输入图片说明

正如评论中所指出的,批次大小越小,批次均值的方差越大,然后出现更多的损失波动。 我通常使用 80 的批量大小,因为我有相当大的内存容量。 您正在使用 ModelCheckpoint 回调并以最佳验证准确度保存模型。 最好保存验证损失最低的模型。 你说增加样本数量会导致拟合不足。 这似乎很奇怪。 通常更多的样本会导致更好的准确性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM