Machine learning Keras验证精度获胜';如果超过75%,则预测效果不佳
我正在使用keras库制作数据集以进行污染预测(NO2)。我对丢失的数据进行了插值,对风向进行了热编码。 在通过MinMaxScaler进行规范化后,列车/验证和测试集上的分割记录通过批处理生成器提供给keras 这是我使用的一些模型,但它们似乎都没有超过75%的验证准确率,并且所做的预测非常糟糕:Machine learning Keras验证精度获胜';如果超过75%,则预测效果不佳,machine-learning,keras,recurrent-neural-network,Machine Learning,Keras,Recurrent Neural Network,我正在使用keras库制作数据集以进行污染预测(NO2)。我对丢失的数据进行了插值,对风向进行了热编码。 在通过MinMaxScaler进行规范化后,列车/验证和测试集上的分割记录通过批处理生成器提供给keras 这是我使用的一些模型,但它们似乎都没有超过75%的验证准确率,并且所做的预测非常糟糕: #### MODEL TYPE DECLARATION AND CONFIGURATION ###################################### code_name =
#### MODEL TYPE DECLARATION AND CONFIGURATION
######################################
code_name = {-1: "linear", 0: "ann_base_single", 1 : "ann_base_multi",
2 : "gru_single_layer", 3 : "gru_single_layer_w_dropout", 4 : "gru_multi_layer", 5 : "gru_multi_layer_2",
6 : "lstm_single_layer", 7 : "lstm_single_layer_w_dropout", 8: "lstm_multi_layer", 9 : "lstm_multi_layer_2"}
model_type = 20
model = Sequential()
if model_type == -1:
model.add(layers.Flatten(input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.Dense(num_y_signals, activation='linear'))
elif model_type == 0:
model.add(layers.Flatten(input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.Dense(hidden_layer_size, activation='relu'))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 1:
model.add(layers.Flatten(input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.Dense(hidden_layer_size, activation='relu'))
model.add(layers.Dense(hidden_layer_size, activation='relu'))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 2:
model.add(layers.GRU(hidden_layer_size, activation='relu', input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 3:
model.add(layers.GRU(hidden_layer_size, activation='relu', input_shape=(sequence_length, x_data.shape[1])))
model.add(Dropout(0.2))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 4:
model.add(layers.GRU(64, activation='relu', return_sequences=True, input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.GRU(32, activation='relu'))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 5:
model.add(layers.GRU(64, activation='relu', return_sequences=True, input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.GRU(32, activation='relu', return_sequences=True))
model.add(layers.GRU(16, activation='relu'))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 6:
model.add(layers.LSTM(hidden_layer_size, activation='relu', input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 7:
model.add(layers.LSTM(hidden_layer_size, activation='relu', input_shape=(sequence_length, x_data.shape[1])))
model.add(Dropout(0.2))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 8:
model.add(layers.LSTM(64, activation='relu', return_sequences=True, input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.LSTM(32, activation='relu'))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
elif model_type == 9:
model.add(layers.LSTM(64, activation='relu', return_sequences=True, input_shape=(sequence_length, x_data.shape[1])))
model.add(layers.LSTM(32, activation='relu', return_sequences=True))
model.add(layers.LSTM(16, activation='relu'))
model.add(layers.Dense(num_y_signals, activation='sigmoid'))
model.compile(optimizer=Adam(), loss='mae', metrics=[metrics.mae, 'accuracy'])
model.summary()
timenow = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S_")
run_name = '{7}_Nodes_{0}-Units_{1}-shift_steps_{2}-aq_parameter_{3}-train_split_{4}-batch_size_{5}-sequence_length_{6}'.format(code_name[model_type], hidden_layer_size, shift_steps, aq_parameter, train_split, batch_size, sequence_length, timenow)
path_checkpoint = 'checkpoints\\{0}.keras'.format(run_name)
#### CALLBACK DECLARATION #######################################
callback_checkpoint = ModelCheckpoint(filepath=path_checkpoint,
monitor='val_loss',
verbose=1,
save_weights_only=True,
save_best_only=True)
callback_early_stopping = EarlyStopping(monitor='val_loss',
patience=4, verbose=1)
callback_reduce_lr = ReduceLROnPlateau(monitor='val_loss',
factor=0.1,
min_lr=1e-5,
patience=3,
verbose=1)
callbacks = [callback_checkpoint,
callback_early_stopping,
callback_reduce_lr,
callback_reset_states]
#### FITTING DATA INTO MODEL
history = model.fit_generator(generator=train_generator,
steps_per_epoch=int(train_data_size / batch_size),
epochs=epochs,
validation_data=validation_data,
callbacks = callbacks,
shuffle= False)
遵循教程
您的代码非常全面,但分析能力不够,无法准确指出是什么导致您的预测保持在75%的范围内 尝试实现keras的一些回调函数,这样您就可以在不同的阶段存储模型,并了解每一层的性能是如何变化的
您必须在Callack声明部分扩展代码,考虑到22种被比较的模型类型,并检查每个模型的结果。您的问题是什么?我想知道,如何改进此模型,使其超过75%的val_acc并做出准确的预测。。。我是机器学习的新手,也许我在数据或其他方面犯了一些错误else@desertnaut你如何理解一个神经网络问题而不了解它的全貌?人们通常因为信息不好而投反对票,而不是反对票。请阅读链接(尤其是为什么这是一个问题&为什么这值得投反对票),以及;一些提示:1)您的22个(!)模型中的哪一个生成这些图?2) 它是否有状态?3) Tensorboard回调对于理解您的问题真的是必要的吗?因此,仅仅把你所有的代码都投入到问题中是行不通的,它需要你方采取一些额外的步骤,以帮助我们帮助你……你如何将MAE(回归指标)与准确性(分类指标)结合起来?你的问题是回归问题还是分类问题?这似乎是前者,在这种情况下,准确性是没有意义的…因为我从一开始就已经在使用这个回调,我无法面对同时比较所有模型的方法。。。您是否建议对所有模型进行一次while{}训练,然后比较检查点?是的,通过在while{}中插入模型,尝试比较检查点可能是解决方案。