Machine learning 模型损失保持不变

Machine learning 模型损失保持不变,machine-learning,scikit-learn,deep-learning,conv-neural-network,learning-rate,Machine Learning,Scikit Learn,Deep Learning,Conv Neural Network,Learning Rate,我想了解是什么导致了这种模型丢失行为。训练一个有6个隐藏层的CNN网络,损失在第一个纪元后从大约1.8上升到12以上,在剩下的99个纪元中保持不变 724504/724504 [==============================] - 358s 494us/step - loss: 1.8143 - acc: 0.7557 - val_loss: 16.1181 - val_acc: 0.0000e+00 Epoch 2/100 724504/724504 [=============

我想了解是什么导致了这种模型丢失行为。训练一个有6个隐藏层的CNN网络,损失在第一个纪元后从大约1.8上升到12以上,在剩下的99个纪元中保持不变

724504/724504 [==============================] - 358s 494us/step - loss: 1.8143 - acc: 0.7557 - val_loss: 16.1181 - val_acc: 0.0000e+00
Epoch 2/100
724504/724504 [==============================] - 355s 490us/step - loss: 12.0886 - acc: 0.2500 - val_loss: 16.1181 - val_acc: 0.0000e+00
Epoch 3/100
724504/724504 [==============================] - 354s 489us/step - loss: 12.0886 - acc: 0.2500 - val_loss: 16.1181 - val_acc: 0.0000e+00
Epoch 4/100
724504/724504 [==============================] - 348s 481us/step - loss: 12.0886 - acc: 0.2500 - val_loss: 16.1181 - val_acc: 0.0000e+00
Epoch 5/100
724504/724504 [==============================] - 355s 490us/step - loss: 12.0886 - acc: 0.2500 - val_loss: 16.1181 - val_acc: 0.0000e+00
我不敢相信这与我使用的数据集有关,因为我使用了一个不同的、公开可用的数据集,性能完全相同(事实上损失/准确度的确切数字)

我还测试了一个有2个隐藏层的网络,请参见下面的性能:

724504/724504 [==============================] - 41s 56us/step - loss: 0.4974 - acc: 0.8236 - val_loss: 15.5007 - val_acc: 0.0330
Epoch 2/100
724504/724504 [==============================] - 40s 56us/step - loss: 0.5204 - acc: 0.8408 - val_loss: 15.5543 - val_acc: 0.0330
Epoch 3/100
724504/724504 [==============================] - 41s 56us/step - loss: 0.6646 - acc: 0.8439 - val_loss: 15.3904 - val_acc: 0.0330
Epoch 4/100
724504/724504 [==============================] - 41s 57us/step - loss: 8.8982 - acc: 0.4342 - val_loss: 15.5867 - val_acc: 0.0330
Epoch 5/100
724504/724504 [==============================] - 41s 57us/step - loss: 0.5627 - acc: 0.8444 - val_loss: 15.5449 - val_acc: 0.0330
有人能指出这种行为的可能原因吗?需要调整哪些参数/配置

编辑

模型创建

model = Sequential()
activ = 'relu'
model.add(Conv2D(32, (1, 3), strides=(1, 1), padding='same', activation=activ, input_shape=(1, n_points, 4)))
model.add(Conv2D(32, (1, 3), strides=(1, 1), padding='same', activation=activ))
model.add(MaxPooling2D(pool_size=(1, 2)))
#model.add(Dropout(.5))

model.add(Conv2D(64, (1, 3), strides=(1, 1), padding='same', activation=activ))
model.add(Conv2D(64, (1, 3), strides=(1, 1), padding='same', activation=activ))
model.add(MaxPooling2D(pool_size=(1, 2)))
#model.add(Dropout(.5))

model.add(Conv2D(128, (1, 3), strides=(1, 1), padding='same', activation=activ))
model.add(Conv2D(128, (1, 3), strides=(1, 1), padding='same', activation=activ))
model.add(MaxPooling2D(pool_size=(1, 2)))
model.add(Dropout(.5))


model.add(Flatten())
A = model.output_shape
model.add(Dense(int(A[1] * 1/4.), activation=activ))
model.add(Dropout(.5))

model.add(Dense(NoClass, activation='softmax'))

optimizer = Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(X_reample, Y_resample, epochs=100, batch_size=64, shuffle=False,
                           validation_data=(Test_X, Test_Y))
将学习率更改为
lr=0.0001
以下是
100个时代后的结果

72090/72090 [==============================] - 29s 397us/step - loss: 0.5040 - acc: 0.8347 - val_loss: 4.3529 - val_acc: 0.2072
Epoch 99/100
72090/72090 [==============================] - 28s 395us/step - loss: 0.4958 - acc: 0.8382 - val_loss: 6.3422 - val_acc: 0.1806
Epoch 100/100
72090/72090 [==============================] - 28s 393us/step - loss: 0.5084 - acc: 0.8342 - val_loss: 4.3781 - val_acc: 0.1925
the optimal epoch size: 97, the value of high accuracy 0.20716827656581954
编辑2

显然,SMOTE不适合在多重分类中对除多数类别以外的所有类别进行采样,请参见下面的trian/测试图:

能否请您尝试在您的池层之后使用“位置”。最好包括它

您的学习率可能太高了优化器设置:
optimizer=Adam(lr=0.001,beta_1=0.9,beta_2=0.999,epsilon=1e-08,detacy=0.0)
Mmm看起来不错,您尝试过其他优化器,比如SGD吗?此外,如果您包含模型和编译语句,这也会有所帮助。请编辑以包含模型编译语句。因此,更改学习率似乎是个问题。我知道问题是采样技术造成的。这是一个多分类(5类)问题,数据集高度不平衡。因此,我应用了SMOTE技术,对所有对象进行采样,但不包括大多数对象,使每个类都有20%的列车组实例。但最终会出现这样的问题如果高度不平衡的数据集精度不是好的度量,请尝试其他度量,如精度、召回率、F1分数等。SMOTE不如您上面描述的好,因为它使大多数类的数据点等于5类多类数据中的少数类