神经网络预测变成直线

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

我实现了一个两层神经网络(根据柯尔莫哥洛夫-阿诺德定理,这足以表示n个变量的任何非线性函数)来预测时间序列。然而,到神经网络结束时,接收到的预测的波动性几乎降至零,并变成一条直线(我附上预测屏幕和神经网络的源代码)。我增加了隐藏层神经元的数量、epoch的数量、训练样本的大小、学习率,改变了训练样本数据归一化的范围,改变了初始权重的范围。没有任何帮助。训练样本大小为336个样本,训练方法为误差反向传播,归一化方法为极小极大。而且,当使用双曲正切作为激活函数时,情况有所改善,但图形看起来也很奇怪。 ReLU 输出“直接预测”。有人对这个问题有什么想法吗?

import random
import sys
import numpy
import math

eta=0.0001 #learning rate
n=200 #number of training epoch. There were also 500, 1000, 5000
inp=30 #input layer size
m=60 #hidden layer size
y=0 #output signal
t=0 #target signal
e=0 #error
d_y=0 #local gradient for the last neuron
err=0 #calculated network error for output neuron
err_av=0 #average network error
path='dataTrain.txt' #training sample
path2='dataLaunch.txt' #launching a forecast
day = 365 #number of days of forecasting
...

其余的在网站上:https://ideone.com/vV2QW6

屏幕截图(激活函数 - sigmoid):https://ibb.co/GHrTGLr

屏幕截图(激活函数 - 双曲正切):https://ibb.co/WHFX3Sc

感谢关注。

python machine-learning neural-network
2个回答
0
投票

这个问题很难回答,因为您正在尝试使用并非为此目的设计的工具来解决时间序列问题。 RNN 或 LSTM 会更合适。

根据我阅读您编写的代码的理解,您似乎已经固定了输入大小(至 30 天)来预测第 31 天。然后滑动 30 天窗口以包含该预测(并排除第一天),以便您可以预测第 32 天。如果我的理解是正确的,你遇到的现象可以简单地解释(我希望):

第 31 天和第 32 天的预测不会有太大不同,因为它们是根据非常相似的输入得出的。 32 和 33 等也是如此。最终所有输入都变得更加相似(因为这些包括我们建立的相似预测)并且输出变得更加相似,直到你得到看起来恒定的东西。


0
投票

我建议在代码中切换 MLP 架构。基于 Kolmogorov-Arnold 表示定理的原理创建了一类新的 ANN 网络 - Kolmogorov-Arnold 网络(或 KAN)。我建议改为研究它,因为它的设计目的是“训练激活函数”而不仅仅是调整权重。在您提到的示例中,具有相同激活函数的不同数据集上的性能可能会有所不同,因此 KAN 代表了一种更灵活的方法。

在本文中 KAN 网络完全用于时间序列分析,并与更传统的时间序列分析方法(例如 Galletti_Lance 的回复中提到的 LSTM)进行了比较。

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