【问题标题】:Val_loss is increasing and val_accuracy is decreasing after around 30 epochs in keras在 keras 大约 30 个 epoch 之后,val_loss 正在增加,而 val_accuracy 正在下降
【发布时间】:2019-12-06 09:43:55
【问题描述】:

我们的 val_loss 和 val_acc 存在一些问题。在几个 epoch(大约 30 个)之后,val_acc 下降到 50-60% 左右,而 val_loss 增加到 0.98 - 1.4 之间(见下图)。文章最后是第45个纪元的结束。

[

    import pickle
    from datetime import time
    import matplotlib.pyplot as plt
    import numpy as np
    import tf as tf
    from keras import optimizers
    from keras.models import Sequential
    from keras.layers import *
    from keras.callbacks import TensorBoard
    from keras.utils import np_utils

    pickle_in = open("X.pickle", "rb")
    X = pickle.load(pickle_in)

    pickle_in = open("y.pickle", "rb")
    y = pickle.load(pickle_in)

    pickle_in = open("PredictionData\\X_Test.pickle", "rb")
    X_Test = pickle.load(pickle_in)

    X = X/255.0
    X_Test = X_Test/255.0

    y = np_utils.to_categorical(y, 5)

    NAME = "Emotion Detection"

    model = Sequential()

    model.add(Conv2D(32, (1, 1), activation="relu", use_bias=True,
                     bias_initializer="Ones",
                     input_shape=(145, 65, 1),
                     dim_ordering="th"))

    model.add(Conv2D(64, (3, 3),
                     activation="relu"))

    model.add(Conv2D(128, (3, 3),
                     activation="relu"))
    model.add(Dropout(0.2))

    model.add(Conv2D(64, (3, 3),
                     activation="relu"))

    model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors

    model.add(Dense(128,
                    activation="relu"))
    model.add(Dropout(0.2))

    model.add(Dense(32,
                    activation="relu"))

    model.add(Dense(5,
                    activation='sigmoid'))

    tensorboard = TensorBoard(log_dir="Tensorboard\\".format(time))

    sgd = optimizers.SGD(lr=0.001, decay=1e-6,
                         momentum=0.9, nesterov=True)

    model.compile(loss="categorical_crossentropy",
                  optimizer=sgd,
                  metrics=['accuracy'])

    history = model.fit(X, y, batch_size=16,
                        epochs=45, validation_split=0.12,
                        callbacks=[tensorboard])


    plt.plot(history.history['accuracy'])
    plt.plot(history.history['val_accuracy'])
    plt.title('Model accuracy')
    plt.ylabel('Accuracy')
    plt.xlabel('Epoch')
    plt.legend(['Accuracy', 'Val_Accuracy'], loc='upper left')
    plt.show()

    plt.plot(history.history['loss'])
    plt.plot(history.history['val_loss'])
    plt.title('Model loss')
    plt.ylabel('Loss')
    plt.xlabel('Epoch')
    plt.legend(['Loss', 'Val_Loss'], loc='upper left')
    plt.show()

    classes = model.predict(X_Test)
    plt.bar(range(5), classes[0])
    plt.show()
    print("prediction: class", np.argmax(classes[0]))


    model.summary()

    model.save("TrainedModel\\emotionDetector.h5") 

2493/2493 [===============================] - 35 秒 14 毫秒/步 - 损失:0.2324 - 准确度: 0.9202 - val_loss:1.3789 - val_accuracy:0.6353

_________________________________________________________________
Layer (type)                 Output Shape              Param    
=================================================================
conv2d_1 (Conv2D)            (None, 32, 65, 1)         4672      
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 30, 63, 64)        640       
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 28, 61, 128)       73856     
_________________________________________________________________
dropout_1 (Dropout)          (None, 28, 61, 128)       0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 26, 59, 64)        73792     
_________________________________________________________________
flatten_1 (Flatten)          (None, 98176)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 128)               12566656  
_________________________________________________________________
dropout_2 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 32)                4128      
_________________________________________________________________
dense_3 (Dense)              (None, 5)                 165       
_________________________________________________________________
Total params: 12,723,909
Trainable params: 12,723,909
Non-trainable params: 0
_________________________________________________________________

希望您能帮助我们。提前致谢。

【问题讨论】:

  • 在不知道您要做什么以及您的数据是什么样的情况下给出答案几乎是不可能的。
  • 我们正在尝试检测语音中的情绪。所以我们创建了一个没有轴的灰度 librosa.waveplot。之后我们读取像素并使用这些数据来训练网络。希望这对您来说已经足够了吗?

标签: tensorflow keras loss acc


【解决方案1】:

这些图是过拟合的典型例子。推荐观看https://en.wikipedia.org/wiki/Overfitting

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2021-07-04
    • 2015-03-31
    • 2019-05-10
    相关资源
    最近更新 更多