我遇到了这个问题,我的模型只有在大约20或30个时期之后才能非常快地收敛,我的数据集包含7000个样本,我的神经网络有3个隐藏层,每个隐藏层有18个神经元,批归一化丢失率为0.2。
我的任务是多标签分类,其中我的标签是0 0 1、0 1 0、1 0 0和0 0 0
num_neuron = 18
model = Sequential()
model.add(Dense(num_neuron, input_shape=(input_size,), activation='elu'))
model.add(Dropout(0.2))
model.add(keras.layers.BatchNormalization())
model.add(Dense(num_neuron, activation='elu'))
model.add(Dropout(0.2))
model.add(keras.layers.BatchNormalization())
model.add(Dense(num_neuron/3, activation='elu'))
model.add(Dropout(0.2))
model.add(keras.layers.BatchNormalization())
model.add(Dense(3, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
              optimizer='nadam',
              metrics=['accuracy'])
history = model.fit(X_train, Y_train,batch_size=512 ,epochs=1000,
                    validation_data=(X_test, Y_test), verbose=2)

我想知道我是否可以做些什么来改进,因为即使我将put设置为1000纪元,也不会有什么真正的改变。

发布于 2020-07-08 02:32:55
这是神经网络训练中的预期行为:一段时间后,训练过程被认为已经收敛,这意味着进一步的训练不会带来任何进一步的进展(事实上,训练时间过长甚至可能会损害模型的泛化能力,因为这可能导致对训练集的过度拟合。为了解决这个问题而创建了提前停止)。
在您的情况下,由于训练已经收敛,并且训练和验证损失都不再减少,因此可以有把握地说,通过这种特定的训练过程和这种特定的模型架构(3个隐藏层,18个神经元),您已经为这个特定的任务实现了尽可能高的准确性。
然而,通过试验这些属性,仍然可以进行改进。在您的情况下,很难说,因为我不知道您正在训练的任务,但由于您的训练损失几乎与验证损失相同,您的模型可能不适合,这意味着如果您使用更强大的模型(每层有更多的神经元)或减少归一化,它可能会变得更好。
https://stackoverflow.com/questions/62776084
复制相似问题