Keras神经网络预测所有输入的数字相同

问题描述 投票:0回答:2

我正在尝试创建一个keras神经网络,以预测城市两点之间道路上的距离。我正在使用Google Maps获取行进距离,然后训练神经网络来做到这一点。

import pandas as pd
arr=[]
for i in range(0,100):
    arr.append(generateTwoPoints(55.901819,37.344735,55.589537,37.832254))
    df=pd.DataFrame(arr,columns=['p1Lat','p1Lon','p2Lat','p2Lon', 'distnaceInMeters', 'timeInSeconds'])
print(df)

神经网络体系结构:

from keras.optimizers import SGD
sgd = SGD(lr=0.00000001)
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential()
model.add(Dense(100, input_dim=4 , activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(1,activation='sigmoid'))
model.compile(loss='mse', optimizer='sgd', metrics=['mse'])

然后我将集合除以进行测试/训练

Xtrain=train[['p1Lat','p1Lon','p2Lat','p2Lon']]/100
Ytrain=train[['distnaceInMeters']]/100000
Xtest=test[['p1Lat','p1Lon','p2Lat','p2Lon']]/100
Ytest=test[['distnaceInMeters']]/100000

然后我将数据放入模型中,但损失保持不变:

history = model.fit(Xtrain, Ytrain,
                    batch_size=1,
                    epochs=1000,
                    # We pass some validation for
                    # monitoring validation loss and metrics
                    # at the end of each epoch
                    validation_data=(Xtest, Ytest))

我稍后打印数据:

prediction = model.predict(Xtest)
print(prediction)
print (Ytest)

但是所有输入的结果都是相同的:

[[0.26150784]
 [0.26171574]
 [0.2617755 ]
 [0.2615582 ]
 [0.26173398]
 [0.26166356]
 [0.26185763]
 [0.26188275]
 [0.2614446 ]
 [0.2616575 ]
 [0.26175532]
 [0.2615183 ]
 [0.2618127 ]]
    distnaceInMeters
2            0.13595
6            0.27998
7            0.48849
16           0.36553
21           0.37910
22           0.40176
33           0.09173
39           0.24542
53           0.04216
55           0.38212
62           0.39972
64           0.29153
87           0.08788

我找不到问题。它是什么?我是机器学习的新手。

python machine-learning keras neural-network non-linear-regression
2个回答
0
投票

如果您可以在整个训练过程中发布损失和MSE(训练和验证/测试集)的进度,那将非常有用。更好的是,最好是按照https://machinelearningmastery.com/display-deep-learning-model-training-history-in-keras/对其进行可视化并在此处发布Vizualization。

同时,基于事实:1)您说损失并没有减少(我假设在训练期间,根据您的编译参数,得出训练集)。2)您说测试集上的预测“准确性”不好。3)我的经验/直觉(不是经验评估)告诉我,您的两层密集模型太小了,无法捕获数据固有的复杂性。也就是您的模型存在偏高https://towardsdatascience.com/understanding-the-bias-variance-tradeoff-165e6942b229

您可以尝试的最快,最简单的方法是尝试在每层中添加更多的层和更多的节点。

但是,我应该注意,除了两个坐标之间的距离外,还有很多因果关系信息会影响行驶距离行驶时间,这可能是您神经网络将最容易提取。例如,无论您是在高速公路上行驶还是在小路旁,交通信号灯,道路转弯还是直行时……仅从数据中推断所有这些,您就需要大量数据(示例)意见。如果您可以添加输入列,例如从这两个点到最近的高速路都偏离了,您也许可以用更少的数据进行训练

[我也建议您将您正在喂食的食物(及其形状)作为输入进行检查,并且应该使用函数sklearn的一些标准化,这可能有助于模型更快地学习并收敛。更快达到更高的“准确性”。

如果并且当您发布更多代码或培训历史记录时,我可以为您提供更多帮助(以及提供多少培训样本)。


© www.soinside.com 2019 - 2024. All rights reserved.