Edit: For anyone interested. I made it slight better. I used L2 regularizer=0.0001, I added two more dense layers with 3 and 5 nodes with no activation functions. Added doupout=0.1 for the 2nd and 3rd GRU layers.Reduced batch size to 1000 and also set loss function to mae
Important note: I discovered that my TEST dataframe wwas extremely small compared to the train one and that is the main Reason it gave me very bad results.
I have a GRU model which has 12 features as inputs and I’m trying to predict output power. I really do not understand though whether I choose
- 1 layer or 5 layers
- 50 neurons or 512 neuron
- 10 epochs with a small batch size or 100 eopochs with a large batch size
- Different optimizers and activation functions
- Dropput and L2 regurlarization
- Adding more dense layer.
- Increasing and Decreasing learning rate
My results are always the same and doesn’t make any sense, my loss and val_loss loss is very steep in first 2 epochs and then for the rest it becomes constant with small fluctuations in val_loss
Here is my code and a figure of losses, and my dataframes if needed:
Dataframe1: https://drive.google.com/file/d/1I6QAU47S5360IyIdH2hpczQeRo9Q1Gcg/view Dataframe2: https://drive.google.com/file/d/1EzG4TVck_vlh0zO7XovxmqFhp2uDGmSM/view
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 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=3 , mode='min',restore_best_weights=True) # creating model using Keras model10 = Sequential() model10.add(GRU(units=200, return_sequences=True, input_shape=(1,12),activity_regularizer=regularizers.l2(0.0001))) model10.add(GRU(units=100, return_sequences=True)) model10.add(GRU(units=50)) #model10.add(GRU(units=30)) 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=1500,epochs=100,validation_split=0.1, 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.scatter( df2_10['WindSpeed_mps'], y10_test, label='Measurements',s=1) plt.scatter( df2_10['WindSpeed_mps'], y10_predicted, label='Predicted',s=1) plt.legend() plt.savefig('/content/drive/My Drive/Figures/we move on curve6 IF10.png') plt.show()
Advertisement
Answer
I made it slightly better. I used L2 regularizer=0.0001, I added two more dense layers with 3 and 5 nodes with no activation functions. Added doupout=0.1 for the 2nd and 3rd GRU layers.Reduced batch size to 1000 and also set loss function to mae
Important note: I discovered that my TEST dataframe was extremely small compared to the train one and that is the main Reason it gave me very bad results.