想问一下关于深度学习的一个问题:
在使用LSTM预测的时候,训练完成进行预测,发现数据存在一个上限,不是数据归一化(归一化0到1之间了)的问题,这个值大概在0.76左右,没有超过1,请问这是什么原因造成的。
这种情况可能是由于模型过拟合造成的。当模型过拟合时,它会在训练数据上表现得非常好,但在新数据上的表现就不那么好了。这可能会导致模型对某些值的预测出现上限,并且无法超过该值。
为了解决这个问题,您可以尝试以下方法:
1 增加训练数据量。这将有助于模型更好地泛化,并减少过拟合的风险。
2 减少模型的复杂度。过于复杂的模型往往更容易过拟合,因此您可以尝试减少模型中的层数或神经元数量。
3 添加正则化项。您可以使用L1或L2正则化来限制模型参数的大小,从而减少过拟合的风险。
4 使用dropout。dropout可以随机地在训练期间关闭一些神经元,在一定程度上减少过拟合的风险。
引入新的归一化函数
def Normalize2(list,low,high):
list = np.array(list)
delta = high - low
if delta != 0:
for i in range(0, len(list)):
list[i] = (list[i]-low)/delta
return list
进行实验
#实验2
train_n,train_low,train_high = Normalize(traindata)
#更新的归一化
test_n = Normalize2(testdata,train_low,train_high)
print(train_n,test_n)
#前一个值预测后一个值
train_X,train_Y = Create_dataset(train_n,look_back=1)
test_X,test_Y = Create_dataset(test_n,look_back=1)
#额外添加一个维度使train_X,test_X变为三维
train_X = np.reshape(train_X, (train_X.shape[0], train_X.shape[1], 1))
test_X = np.reshape(test_X, (test_X.shape[0], test_X.shape[1], 1))
model = Train_Model(train_X,train_Y)
train_predict = model.predict(train_X)
test_predict = model.predict(test_X)
#反归一化
train_Y = FNoramlize(train_Y,train_low,train_high)
train_predict = FNoramlize(train_predict,train_low,train_high)
test_Y = FNoramlize(test_Y,train_low,train_high)
test_predict = FNoramlize(test_predict,train_low,train_high)
#进行绘图
plt.subplot(121)
plt.plot(train_Y)
plt.plot(train_predict)
plt.subplot(122)
plt.plot(test_Y)
plt.plot(test_predict)
plt.show()
这时预测结果如图
可以看到对于test数据预测结果发生了变化,周期没有改变,但是值发生了改变