Python LSTM时间序列预测-从低损耗开始,精度不变

Python LSTM时间序列预测-从低损耗开始,精度不变,python,keras,deep-learning,lstm,Python,Keras,Deep Learning,Lstm,我试图根据过去的值预测网络流量。我建立了一个LSTM网络,并尝试了几个参数,但是我总是以同样的非常低的精度(0.108)结束 正如你们所看到的,我的损失是从一个很低的值开始的,我的准确度随着时间的推移是恒定的。我做错了什么 提前感谢。:) 您可以在此处找到损耗和精度图: 如果(13942,1,1)是您的整个数据集,那么它对于深度学习来说太小了;最好使用“浅层”方法,例如支持向量机(SVM)。或者,考虑我的回答。< /P> 编辑:我刚刚注意到您使用了精度指标;回归的准确性是未定义的-我很惊讶没有抛

我试图根据过去的值预测网络流量。我建立了一个LSTM网络,并尝试了几个参数,但是我总是以同样的非常低的精度(0.108)结束

正如你们所看到的,我的损失是从一个很低的值开始的,我的准确度随着时间的推移是恒定的。我做错了什么

提前感谢。:)

您可以在此处找到损耗和精度图:

如果
(13942,1,1)
是您的整个数据集,那么它对于深度学习来说太小了;最好使用“浅层”方法,例如支持向量机(SVM)。或者,考虑我的回答。< /P> 编辑:我刚刚注意到您使用了
精度
指标;回归的准确性是未定义的-我很惊讶没有抛出错误。如果它使用
prediction==true
来计算精度,那么您很幸运您的精度不是0。根据损失情况,你的模型看起来确实做得很好;要进行双重检查,请绘制
预测
vs
true
并进行比较。(通常,
mse<.3
是好的,
mse<.1
是好的)

  • 尝试随机洗牌数据
  • 使用顺序数据时,最好使用LSTM。尝试用致密层替换LSTM。或者改变你的输入。您需要将一系列过去的值传递给LSTM,以便它可以预测下一个值。所以,(1,1)不是一个序列,LSTM在这里没有用处。 在这种情况下,度量精度是无用的,试试平均绝对误差之类的

  • 你能说说你的X_火车的形状吗?培训:(13942,1,1)见更新的答案;您的模型可能工作得很好。@anon LSTM层设计得很深,通过时间反向传播。这是一种不同的“深度”,但它的共同特点是需要大量数据才能有效。诚然,8个单元的大小非常小,它可能会起作用,但我不敢打赌。我并不特别同意这一点,在lstm、gru的设计之后,深度学习出现了很多。所以,说LSTM层设计得很深没有多大意义。深度学习也不仅仅是为神经网络保留的东西,你可以拥有深度支持向量机,深度森林。因此,请提供一个严格的来源,每个人都会感激的参考。你对MSE的评论也不完全正确。你应该知道acc是如何在keras中实现的。它不应该抛出错误,它实际上给出了一个四舍五入的匹配,这并不是完全荒谬的,但最好在回归设置中避免。@anon RNN递归地在隐藏状态之间传递信息,并在每个状态之间反向传播梯度以更新权重(因此,对于给定的
    隐藏维度
    时间步
    ),需要学习更多的数据)。因此,是的,它们在设计上是沿着循环维度深入的。无论Keras精度是否会引发错误,在回归上下文中都是毫无意义的用法,必须避免。
    scaler = MinMaxScaler(feature_range = (0, 1))
    dataset = scaler.fit_transform(dataset)
    train_size = int(len(dataset) * 0.67)
    test_size = len(dataset) - train_size
    train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
    print(len(train), len(test))
    
    def create_dataset(dataset, window_size = 1):
        data_X, data_Y = [], []
        for i in range(len(dataset) - window_size - 1):
            a = dataset[i:(i + window_size), 0]
            data_X.append(a)
            data_Y.append(dataset[i + window_size, 0])
        return(np.array(data_X), np.array(data_Y))
    
    window_size = 1
    train_X, train_Y = create_dataset(train, window_size)
    test_X, test_Y = create_dataset(test, window_size)
    print("Original training data shape:")
    print(train_X.shape)
    
    # Reshape the input data into appropriate form for Keras.
    train_X = np.reshape(train_X, (train_X.shape[0], 1, train_X.shape[1]))
    test_X = np.reshape(test_X, (test_X.shape[0], 1, test_X.shape[1]))
    
    model = Sequential()
    model.add(LSTM(4, input_shape = (1, window_size)))
    model.add(Dense(1))
    opt = optimizers.SGD(lr=0.01, momentum=0.9)
    model.compile(loss = "mean_squared_error", optimizer = opt, metrics = ['accuracy'])