我正在尝试创建一个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
我找不到问题。它是什么?我是机器学习的新手。
如果您可以在整个训练过程中发布损失和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的一些标准化,这可能有助于模型更快地学习并收敛。更快达到更高的“准确性”。
如果并且当您发布更多代码或培训历史记录时,我可以为您提供更多帮助(以及提供多少培训样本)。
@ ElegantCode此处为图表