【问题标题】:Multidimensional regression with keras使用 keras 进行多维回归
【发布时间】:2018-12-04 01:04:37
【问题描述】:

我想使用 keras 根据 n 个输入预测 x、y 坐标。我不清楚为什么我的网络在大约 5 个时期后不会改善。如果我的输入变量从 5-14(x) 和 5-11(y) 变化,我不明白为什么 x=2.9 和 y=2.1 等网络值。如何获得更好的预测?

数据:

input:
[[-92.    0.  -83.    0.    0.    0. ]
[  0.    0.    0.  -82.    0.    0. ]
...
[-65.5 -82.    0.    0.    0.    0. ]]
output:
[[ 5  5]
[ 5  5]
...
[11 14]]
Results:
Predicted:  [4.396636 4.019871]  label:  [11 14]  Difference:  16.583492755889893
Predicted:  [2.9728146 2.1784768]  label:  [11 14]  Difference:  19.848708629608154
Predicted:  [3.9281645 4.2113876]  label:  [11 14]  Difference:  16.860447883605957

网络:

from keras.models import Sequential
from keras.layers import *

model = Sequential()
model.add(Dense(16, input_dim = ipad_test_numpy_input.shape[1], activation='linear'))
model.add(Dense(8, activation='linear'))
model.add(Dense(2, activation='linear'))
model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(ipad_numpy_input, ipad_numpy_labels, epochs=50, batch_size=5)
score = model.evaluate(ipad_test_numpy_input, ipad_test_numpy_labels, batch_size=5)

【问题讨论】:

  • 除了下面的答案之外,您还需要在将数据输入神经网络之前规范化...

标签: python neural-network keras regression prediction


【解决方案1】:

尝试将前两层的激活更改为

activation='relu'

看看这是否通过引入非线性来改善事情。你目前只是在执行一系列线性变换,所以你并没有真正以任何方式利用神经网络的力量。还有很多其他原因可能导致事情没有您希望的那么好,但它们有点超出了 stackoverflow 答案的范围。如果你有足够大的数据集,那么正则化将是开始阅读的第一件事。

【讨论】:

  • 感谢您的回复。我将初始层更改为 relu,但收到的结果更糟。我确实分成了 ipad_TEST 和 ipad_ 数据。我会研究正则化。
  • 所以现在我尝试将 Batch_normalization 添加到第一层并改组。然后我用batch_size、epochs、learning_rate、momentum、dropout、momentum、内核正则化器(l1和l2)、每层神经元、层数、激活函数、初始化和一层到下一层的神经元关系进行了网格搜索。经过这一切,我取得了进步,但结果却相当不足(在 9x9m 的房间中精度为 2-3m),我该怎么办?
  • 你的数据集有多大?
  • 3864 个条目。你会推荐更多吗?我的网格搜索结果是这些参数是迄今为止最好的:neurons=550, optimizer='adam', activation='relu', learn_rate=0.001, momentum=0.004, init_mode='he_uniform', dropout_rate=0.0, n_of_layers=3, neuron_shrink_rate=0.5, kernel_regularizer=regularizers.l2(0.0)
  • 这在一定程度上取决于问题,但这实际上是在使用深度学习架构的下限附近或之下。如果您能够轻松获得更多数据,它可能会有所帮助:samples_min = parameters^2 是一个非常粗略的经验法则......根据该计算,您的 550 个神经元网络至少需要 300,000 个样本(您可能有超过 550 个参数)。我可能更喜欢不同的方法(例如,你有一个普通最小二乘法的基线吗?)。
猜你喜欢
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2018-06-18
  • 2020-05-20
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多