在回归模型之间进行选择

数据挖掘 机器学习 喀拉斯 回归 插值
2022-03-08 21:56:53

这是我第一次尝试将机器学习与Keras. 与其他人相比,我需要使用此类算法的缺点之一。

我需要一个函数,它接受一个对象angledistance输出一个new anglepower(例如,想象用弓瞄准一个物体,算法告诉我我的手臂应该走多远以及弓的力量)。这种配置没有任何预测性。4D (input,output)我将针对每种可能的情况生成大量数据。我希望人工智能“评估”一些输入并返回该组输入的相应输出,换句话说,记住数据并输出相同的数字。

我需要一个 AI 来完成这项任务,因为我需要它从未见过的输入值之间的平滑值(有限插值)

我使用了两个模型:

model = Sequential()
model.add(Dense(12, input_dim=2, activation='relu'))
model.add(Dense(24, activation='relu'))
model.add(Dense(24, activation='relu'))
model.add(Dense(24, activation='sigmoid'))
model.add(Dense(2, activation='linear'))

现在我知道这是不正确的,因为Sigmoid它用于二进制分类。尽管如此,它仍然有效!我最终得到了mse4 分。我没有管理具有相同#时期all-ReLu的层获得相同的损失。

model = Sequential()
model.add(Dense(12, input_dim=2, activation='relu'))

model.add(Dense(24, activation='linear'))
model.add(LeakyReLU(alpha=0.1))

model.add(Dense(24, activation='linear'))
model.add(LeakyReLU(alpha=0.1))

model.add(Dense(2, activation='linear'))

这个模型有loss of 5.43500 个 epochs 并且似乎在这里稳定下来。

笔记:

  1. 我不得不重新训练模型,因为我生成训练数据的速度非常快。我需要继续使用一个能够继续减少损失的模型。
  2. 规范化比我见过的任何事情都要糟糕。
  3. 因为我的模型应该对不同的非常接近的输入敏感,所以我使用从 5 到 2 的批处理值进行测试。
  4. 我的数据集目前是 1100 行
  5. 这个模型将根据我提供的数据进行非常密切的训练。我输入多少行并不重要,因为我不想要预测或概括。我希望 AI 输出它所看到的相应输入集。这意味着将 AI 过度拟合到最大值,直到它达到非常低的损失。然后我可以测试它的训练值。

我应该继续使用第一个模型吗?Sigmoid使用图层有意义吗?第二个模型如何改进?

我的数据样本

theta[-90,90], distance [0,40],  theta_output[-90,90] power[0,1,2]
0.0,8.696802,0.25688815116882324,1
-1.990075945854187,5.455038,11.56562614440918,1
-56.81309127807617,3.1364963,-53.07550048828125,1
-38.21211242675781,4.718147,-32.30286407470703,1
-33.828956604003906,5.163292,-35.61191940307617,0
-27.64937973022461,6.182574,-25.107540130615234,1
2.8613548278808594,13.922726,-2.3708770275115967,2
-8.812483787536621,14.951225,-3.919188976287842,2
0.0,21.448895,-3.9320743083953857,2
1个回答

评论中的建议是适当的。

不过,如果您想尝试 NN,您可以尝试这些建议 -

- 根据一般指导原则,没有一个模型看起来是最好的
- 将 ReLu 作为所有隐藏层,最后一层是线性的(回归)
- 标准化/标准化必须在之前完成训练
- 添加批量标准化层

也可以试试
,因为你的输出看起来像 Classes [0,1,2]。尝试功率分类模型和输出角度回归模型
分类 - 最后激活 - Softmax,损失 - categorical_cross_entropy标签 - one-hot 编码