我有 50 000 行的数据集,范围从 35-50 列,基于它,我需要为每行预测 3 个值。
<块引用>例如43208.7032; (37 个递增值); 48743.4976 -> 3.7707; 372.9719; 1.158718
到目前为止,我得到的最好结果是平均绝对误差接近 0.05,而我需要它接近 0.001-0.0005。
我用零填充了缺失的数据,并使用 keras.layers.experimental.preprocessing.Normalization 对 X 进行了标准化,创建了回调:
callbackPlateau = ReduceLROnPlateau(
monitor='val_loss',
factor=0.8,
patience=5,
verbose=1,
mode='min',
min_lr=0.0000001
)
并创建了模型,该模型给出的结果接近 0.05 mean_absolute_error:
model = Sequential()
model.add(Dense(60, input_dim=amount_of_columns, activation=LeakyReLU(alpha=0.6)))
model.add(Dense(90, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(270, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(90, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(45, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(15, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(45, activation=LeakyReLU(alpha=0.4)))
model.add(Dense(3, activation=LeakyReLU(alpha=0.4)))
opt = Adam(learning_rate=0.01)
model.compile(loss='mean_absolute_error', optimizer=opt)
我训练它:
history = model.fit(
training_x,
training_y,
epochs=550,
batch_size=128,
callbacks=[callbackPlateau, callbackEarly],
validation_data=(validation_x, validation_y))
在最后一个时期给出:
Epoch 343/550
274/274 [==============================] - 2s 6ms/step - loss: 0.0409 - val_loss: 0.0507
Epoch 00343: ReduceLROnPlateau reducing learning rate to 6.805647899454925e-07.
Epoch 00343: early stopping
并计算为:
79/79 [==============================] - 0s 2ms/step - loss: 0.0476
这是我的损失图: Image of plot loss+val_loss/epoch
这里是示例结果:
Example predictions:
3.6658335; 374.98608; 1.2702768 (expected 3.6646; 374.9678; 1.271311), abs_err: 0.0025;
3.742614; 373.0805; 1.1156969 (expected 3.7444; 373.0549; 1.116855), abs_err: 0.0032;
3.6771998; 369.40353; 1.2375629 (expected 3.6812; 369.4603; 1.231281), abs_err: 0.0108;
Worst:
3.5641375; 362.88254; 1.1704892 (expected 3.6136; 376.969; 1.137181), abs_err: 0.2236;
我尝试了各种数量的节点和层,并尝试使用线性和 relu 激活。
有什么我可以做得更好或额外使模型给出更好的最终结果的吗? 这是我的第一个深度学习项目。