我有一个需要预测目标的数据集,它是或1,
对我来说,很高兴知道这个预测接近,比如0.20,或者接近1,比如0.89等等。
我的模型结构是:
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=1, strides=1))
model.add(LSTM(128, return_sequences=True, recurrent_dropout=0.2,activation='relu'))
model.add(Dense(128, activation="relu",
kernel_regularizer=regularizers.l1_l2(l1=1e-5, l2=1e-4),
bias_regularizer=regularizers.l2(1e-4),
activity_regularizer=regularizers.l2(1e-5)))
model.add(Dropout(0.4))
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=1, strides=1))
model.add(LSTM(64, return_sequences=True,activation='relu'))
model.add(Dense(64, activation="relu",kernel_regularizer=regularizers.l1_l2(l1=1e-5, l2=1e-4),
bias_regularizer=regularizers.l2(1e-4),
activity_regularizer=regularizers.l2(1e-5)))
model.add(Dropout(0.4))
model.add(Conv1D(filters=32, kernel_size=2, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=1, strides=1))
model.add(LSTM(32, return_sequences=True, recurrent_dropout=0.2, activation='relu'))
model.add(Dense(32, activation="relu",kernel_regularizer=regularizers.l1_l2(l1=1e-5, l2=1e-4),
bias_regularizer=regularizers.l2(1e-4),
activity_regularizer=regularizers.l2(1e-5)))
model.add(Dropout(0.4))
model.add(BatchNormalization())
model.add(Dense(1, activation='linear'))
from keras.metrics import categorical_accuracy
model.compile(optimizer='rmsprop',loss="mse",metrics=['accuracy'])
model.fit(X_train,y_train,epochs=1000, batch_size=16, verbose=1, validation_split=0.1, callbacks=callback)模型概述如下:https://pastebin.com/Ba6ErEzj
培训的详细内容如下:
Epoch 58/1000
277/277 [==============================] - 1s 5ms/step - loss: 0.2510 - accuracy: 0.4937 - val_loss: 0.2523 - val_accuracy: 0.4878
Epoch 59/1000
277/277 [==============================] - 1s 5ms/step - loss: 0.2515 - accuracy: 0.4941 - val_loss: 0.2504 - val_accuracy: 0.5122我怎样才能改进呢?0或1输出的精度在0.50左右是无用的。
这是我的Colab码。
发布于 2021-03-11 10:45:42
总结一些建议(一些已经在评论中提出),并提出一些理由.
错误。您处于二进制分类设置中,因此:
loss='binary_crossentropy'activation='sigmoid'。最佳实践。regularization,使用诸如退出、批处理规范化和内核&胫骨正则化之类的东西,即(粗略地说)以避免过度拟合。在默认情况下,应该使用而不是,并且这样做是众所周知的,以防止学习(就像这里看起来的那样):
您可以考虑在后面一步一步地添加其中的一些,但前提是您看到了过度适应的迹象。
General advice.现在,优化器的首选通常是Adam,因此将其作为第一种方法更改为optimizer='adam'。
也就是说,归根结底,一切都取决于您的数据(包括数据的数量和质量)以及需要解决的特定问题。实验是王者(但要记住上面所述的一般原则)。
https://stackoverflow.com/questions/66578873
复制相似问题