在解决了输入形状的问题后,我运行了程序,但问题是程序输出的总损失值过高(例如,与快速入门教程中的损失值相比)。
我的目标是通过使用过去的数据来预测未来的拥堵情况(我有超过1000万条带有评分的数据),所以训练数据应该不是问题。
这是我的代码:
import numpy as npimport tflearn# 加载CSV文件,并指明第一列代表标签from tflearn.data_utils import load_csvdata, labels = load_csv('nowcastScaled.csv', has_header=True, n_classes=2)# 数据预处理函数def preprocess(data): return np.array(data, dtype=np.float32)# 预处理数据data = preprocess(data)# 构建神经网络net = tflearn.input_data(shape=[None, 2])net = tflearn.fully_connected(net, 32)net = tflearn.fully_connected(net, 32)net = tflearn.fully_connected(net, 2, activation='linear')data = np.reshape(data, (-1, 2))labels = np.reshape(labels, (-1, 2))net = tflearn.regression(net, optimizer='adam', learning_rate=0.001, loss='categorical_crossentropy')# 定义模型model = tflearn.DNN(net)# 开始训练(应用梯度下降算法)model.fit(data, labels, n_epoch=15, batch_size=16, show_metric=True)# 训练model.save('test_Model')model.load('test_Model')score = model.evaluate(data, labels, batch_size=16)
我的Excel文件看起来是这样的(2列,100,000行)
calculed_at , congestion1 , 562 , 21
这是结果的显示(15个epoch):
Training samples: 50000Validation samples: 0....--Training Step: 40625 | total loss: 15.27961 | time: 17.659s| Adam | epoch: 013 | loss: 15.27961 - acc: 0.7070 -- iter: 50000/50000--Training Step: 43750 | total loss: 15.66268 | time: 17.549s| Adam | epoch: 014 | loss: 15.66268 - acc: 0.7247 -- iter: 50000/50000--Training Step: 46875 | total loss: 15.94696 | time: 18.037s| Adam | epoch: 015 | loss: 15.94696 - acc: 0.7581 -- iter: 50000/50000--
您知道是什么导致了如此高的损失吗?这看起来很奇怪,因为输出的准确率似乎还不错。感谢您的帮助。
编辑:我刚才尝试时,总损失超过了280(准确率低于0.3或略高于0.3)。
回答:
对于时间序列,您可以通过考虑时间窗口的框架来构建输入/输出样本。在每个窗口中,如果样本是{0, 1, ...N}
,选择前N-1
个样本作为输入,最后一个样本作为输出。然后您可以进行回归来进行时间预测
。