Python GRU模型过拟合
为了预测功率输出,我编写了一个GRU模型<不过,我注意到,在5-6个纪元之后,我的价值损失开始增加,并且在每个纪元之后都没有停止,而且超出了相当大的范围Python GRU模型过拟合,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,为了预测功率输出,我编写了一个GRU模型
我尝试了很多方法,但都没有真正起作用:
relu
,sigmoid
和线性
激活函数退出
和L2正则化器,但没有任何效果,它要么在几个时代后过度拟合,要么保持不变model10.add(GRU(units=256, return_sequences=True, dropout=0.3,
recurrent_dropout=0.4, kernel_regularizer=regularizers.l2(0.001), input_shape=(1,12)))
model10.add(GRU(units=256, return_sequences=True,activation='linear',
dropout=0.25, recurrent_dropout=0.3))
model10.add(GRU(units=128,activation='linear',
dropout=0.3, recurrent_dropout=0.35))
代码如下:
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from google.colab import files
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
tbc=TensorBoardColab() # Tensorboard
from keras.layers.core import Dense
from keras.layers.recurrent import GRU
from keras.models import Sequential
from keras.callbacks import EarlyStopping
from keras import regularizers
from keras.layers import Dropout
df10=pd.read_csv('/content/drive/My Drive/Isolation Forest/IF 10 PERCENT.csv',index_col=None)
df2_10= pd.read_csv('/content/drive/My Drive/2019 Dataframe/2019 10minutes IF 10 PERCENT.csv',index_col=None)
X10_train= df10[['WindSpeed_mps','AmbTemp_DegC','RotorSpeed_rpm','RotorSpeedAve','NacelleOrientation_Deg','MeasuredYawError','Pitch_Deg','WindSpeed1','WindSpeed2','WindSpeed3','GeneratorTemperature_DegC','GearBoxTemperature_DegC']]
X10_train=X10_train.values
y10_train= df10['Power_kW']
y10_train=y10_train.values
X10_test= df2_10[['WindSpeed_mps','AmbTemp_DegC','RotorSpeed_rpm','RotorSpeedAve','NacelleOrientation_Deg','MeasuredYawError','Pitch_Deg','WindSpeed1','WindSpeed2','WindSpeed3','GeneratorTemperature_DegC','GearBoxTemperature_DegC']]
X10_test=X10_test.values
y10_test= df2_10['Power_kW']
y10_test=y10_test.values
# scaling values for the model
x_scale = MinMaxScaler()
y_scale = MinMaxScaler()
X10_train= x_scale.fit_transform(X10_train)
y10_train= y_scale.fit_transform(y10_train.reshape(-1,1))
X10_test= x_scale.fit_transform(X10_test)
y10_test= y_scale.fit_transform(y10_test.reshape(-1,1))
X10_train = X10_train.reshape((-1,1,12))
X10_test = X10_test.reshape((-1,1,12))
Early_Stop=EarlyStopping(monitor='val_loss', patience=5,mode='min',restore_best_weights=True)
# creating model using Keras
model10 = Sequential()
model10.add(GRU(units=256, return_sequences=True, kernel_regularizer=regularizers.l2(0.001), input_shape=(1,12)))
model10.add(GRU(units=256, return_sequences=True,activation='linear'))
model10.add(GRU(units=128,activation='linear'))
#model10.add(GRU(units=256))
model10.add(Dense(units=1, activation='linear'))
model10.compile(loss=['mse'], optimizer='adam',metrics=['mse'])
model10.summary()
history10=model10.fit(X10_train, y10_train, batch_size=256, epochs=10,validation_split=0.10, verbose=1, callbacks=[TensorBoardColabCallback(tbc),Early_Stop])
score = model10.evaluate(X10_test, y10_test)
print('Score: {}'.format(score))
y10_predicted = model10.predict(X10_test)
y10_predicted = y_scale.inverse_transform(y10_predicted)
y10_test = y_scale.inverse_transform(y10_test)
plt.plot( y10_predicted, label='Predicted')
plt.plot( y10_test, label='Measurements')
plt.legend()
plt.savefig('/content/drive/My Drive/Figures/Power Prediction 10 Percent.png')
plt.show()
过度拟合的一个原因可能是您使用了3个GRU层
您可以从1层GRU
开始,因为堆叠许多GRU
层不仅会导致过度装配,而且成本非常昂贵
确保正确清洁数据
,并执行功能工程
(删除不必要的列等…),因为模型
从不需要的噪声中学习
如果模型
与1层
没有过度拟合
,并且如果在准确性
(或相应的度量
)方面存在改进范围,那么我们可以添加第二个GRU层
我们还需要在每个GRU层
中添加辍学
和经常性辍学
,如下所示。它们在缓解过度装配方面非常有效
model10.add(GRU(units=256, return_sequences=True, dropout=0.3,
recurrent_dropout=0.4, kernel_regularizer=regularizers.l2(0.001), input_shape=(1,12)))
model10.add(GRU(units=256, return_sequences=True,activation='linear',
dropout=0.25, recurrent_dropout=0.3))
model10.add(GRU(units=128,activation='linear',
dropout=0.3, recurrent_dropout=0.35))
希望这有帮助。学习愉快 准确度有多好/有多差?我被告知不要在指标中使用准确度,因为我的数据帧是每年第二个数据帧,并且基于不断波动的物理参数。“为什么我的模型过度拟合”不是堆栈溢出的编程问题,而是交叉验证的机器学习问题(stats.stackexchange.com)或数据科学(datascience.stackexhage.com)然而,我也建议在询问之前搜索这两个网站(它们很棒!)以寻找类似的问题……这里有很多关于过度拟合的问题。