具有高准确率但预测效果差的Keras模型

我正在尝试训练一个神经网络来进行机器人手臂的逆运动学计算,机器人手臂具有预定义的段长度。我没有将段长度包含在神经网络的输入中,而是通过训练数据来处理。训练数据是一个pandas数据框架,包含手臂的空间映射,标签是手臂三个段的旋转角度,特征是最后一段末端将到达的x和y坐标的解。

我使用Keras和Theano作为后端。

model = Sequential([Dense(3, input_shape=(2,), activation="relu"),Dense(3, activation="relu"),Dense(3)])model.summary()model.compile(Adam(lr=0.001), loss='mean_squared_error', metrics=['accuracy'])model.fit(samples, labels, validation_split=0.2, batch_size=1000, epochs=10,shuffle=True, verbose=1)score = model.evaluate(samples, labels, batch_size=32, verbose=1)print('Test score:', score[0])print('Test accuracy:', score[1])weights = model.get_weights()predictions = model.predict(samples, verbose=1)print predictionsmodel.save("IK_NN_7-4-3_keras.h5")OUTPUT===============================================================Train on 6272736 samples, validate on 1568184 samplesEpoch 1/10 - 5s - loss: 10198.7558 - acc: 0.9409 - val_loss: 12149.1703 - val_acc: 0.9858Epoch 2/10 - 5s - loss: 4272.9105 - acc: 0.9932 - val_loss: 12117.0527 - val_acc: 0.9858Epoch 3/10 - 5s - loss: 4272.7862 - acc: 0.9932 - val_loss: 12113.3804 - val_acc: 0.9858Epoch 4/10 - 5s - loss: 4272.7567 - acc: 0.9932 - val_loss: 12050.8211 - val_acc: 0.9858Epoch 5/10 - 5s - loss: 4272.7271 - acc: 0.9932 - val_loss: 12036.5538 - val_acc: 0.9858Epoch 6/10 - 5s - loss: 4272.7350 - acc: 0.9932 - val_loss: 12103.8665 - val_acc: 0.9858Epoch 7/10 - 5s - loss: 4272.7553 - acc: 0.9932 - val_loss: 12175.0442 - val_acc: 0.9858Epoch 8/10 - 5s - loss: 4272.7282 - acc: 0.9932 - val_loss: 12161.4815 - val_acc: 0.9858Epoch 9/10 - 5s - loss: 4272.7213 - acc: 0.9932 - val_loss: 12101.4021 - val_acc: 0.9858Epoch 10/10 - 5s - loss: 4272.7909 - acc: 0.9932 - val_loss: 12152.4966 - val_acc: 0.9858Test score: 5848.549130022683Test accuracy: 0.9917127071823204[[ 59.452095 159.26912  258.94424 ] [ 59.382706 159.41936  259.25183 ] [ 59.72419  159.69777  259.48584 ] ... [ 59.58721  159.33467  258.9603  ] [ 59.51745  159.69331  259.62595 ] [ 59.984367 160.5533   260.7689  ]]

测试准确率和验证准确率看起来都不错,但它们并不完全反映实际情况。预测结果应该看起来像这样:

[[  0   0   0][  0   0   1][  0   0   2]...[358 358 359][358 359 359][359 359 359]]

因为我反馈了相同的特征,期望得到相同的标签。但不知为何,我得到了这些数字:

[[ 59.452095 159.26912  258.94424 ] [ 59.382706 159.41936  259.25183 ] [ 59.72419  159.69777  259.48584 ] ... [ 59.58721  159.33467  258.9603  ] [ 59.51745  159.69331  259.62595 ] [ 59.984367 160.5533   260.7689  ]]

感谢您的时间。


回答:

首先,您使用的度量是准确率,而您预测的是连续值。虽然您得到了预测结果,但它们没有任何意义。您的问题是回归问题,而您使用的度量是针对分类问题的。您可以只使用“MSE”、“R²”或其他回归度量。

from keras import metricsmodel.compile(loss='mse', optimizer='adam', metrics=[metrics.mean_squared_error, metrics.mean_absolute_error])

此外,您应该考虑增加神经元的数量,如果您的输入数据真的只有两个维度,可以考虑一些浅层模型,而不是人工神经网络(例如使用高斯核的SVM)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注