ГРУ модель наряды - PullRequest
       0

ГРУ модель наряды

1 голос
/ 08 марта 2020

Я написал модель GRU для прогнозирования выходной мощности.
Я заметил, однако, что после 5-6 эпох мой val_loss начинает увеличиваться и не останавливается после каждой эпохи, и он очень плохо подходит.
Я перепробовал много вещей, но на самом деле ничего не работает:

  1. Я пробовал relu, sigmoid и linear функции активации.
  2. I ' мы начали с 1 слоя с разным количеством нейронов и увеличенных слоев и т. д. c.
  3. Я пытался использовать dropout и регуляризатор L2, но на самом деле ничего не работает, он либо перегружается после нескольких эпох, либо остается постоянным

Мои функции - это разные физические параметры, например температура, напряжение, скорость ветра и др. c. и я пытаюсь предсказать поставленную власть. Использую ли я неправильную активацию или оптимизатор, я действительно не понимаю, почему она переоснащается.

Код ниже:

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()

1 Ответ

0 голосов
/ 08 мая 2020

Одной из причин Overfitting может быть то, что вы используете 3 GRU Layers.

Вы можете начать с 1 GRU Layer, потому что укладка многих GRU слоев не только приводит к переоснащению, но и очень дорогая.

Убедитесь, что вы правильно чистите Data и выполняете Feature Engineering (удаление ненужных столбцов и т. Д. c ..), поскольку Model извлекает уроки из нежелательного Noise.

Если Model не равен Overfitting с 1 Layer и если есть область улучшения с точки зрения Accuracy (или соответствующего Metrics), то мы можем добавить 2-е GRU Layer.

Нам также нужно добавить Dropout и Recurrent_Dropout в каждый GRU Layer, как показано ниже. Они очень эффективны в смягчении перенапряжения.

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))

Надеюсь, это поможет. Счастливого обучения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...