我是机器学习的新手,所以如果这个问题经常出现,我会提前道歉,因为我无法找到令人满意的答案。 作为教学活动,我一直在尝试训练ANN以预测正弦波。我的问题是,尽管我的神经网络可以准确地训练正弦波的形状,但在验证集和较大的输入中却不能这样做。因此,我首先将输入和输出作为
x = np.arange(800).reshape(-1,1) / 50
y = np.sin(x)/2
其余代码按
model = Sequential()
model.add(Dense(20, input_shape=(1,),activation = 'tanh',use_bias = True))
model.add(Dense(20,activation = 'tanh',use_bias = True))
model.add(Dense(1,activation = 'tanh',use_bias = True))
model.compile(loss='mean_squared_error', optimizer=Adam(lr=0.005), metrics=['mean_squared_error'])
history = model.fit(x,y,validation_split=0.2, epochs=2000, batch_size=400, verbose=0)
然后我设计一个测试,定义为
x1= np.arange(1600).reshape(-1,1) / 50
y1 = np.sin(x1)/2
prediction = model.predict(x1, verbose=1)
因此,问题在于ANN在验证集中显然开始失败,并预测正弦波的继续。
验证集的奇怪行为:
除了训练集以外,无法预测其他任何事情:
那么,我在做什么错? ANN是否无法继续正弦波?我试图微调大多数可用参数,但没有成功。关于相似问题的大多数常见问题解答都是由于过拟合造成的,但我无法解决此问题。
答案 0 :(得分:1)
恭喜您初次尝试涉足深度学习的一个基本问题:)
您所做的是正确的,并且,实际上,ANN(以当前形式)无法继续正弦波。
但是,当验证错误开始增加时,从epoch 800开始,您可以在MSE图中看到过度拟合的迹象。
答案 1 :(得分:1)
如上所述,您的NN无法“掌握”数据的循环特性。
您只能将DNN由密集层组成,就像智能版本的线性回归一样-使用DNN的原因是拥有可以由网络本身“学习”的高级非线性抽象特征,而不是手工工程特性。相反,这些功能很难描述和理解。
因此,一般而言,DNN可以很好地预测“中间”的未知点,距离训练集x越远,预测的准确性就越差。再次,一般。
要预测本质上是周期性的事物,您应该使用更复杂的体系结构,或者对数据进行预处理,即了解“季节”或“基频”。