编辑:适用于任何有兴趣的人。我做了一点好。我使用了L2正则化器= 0.0001,我添加了另外两个具有3和5个节点的密集层,而没有激活功能。为第二和第三GRU层添加了doupout = 0.1。将批次大小减小为1000,并将损失函数设置为mae

重要说明:我发现我的TEST数据帧与火车1相比非常小,这是它给我非常糟糕的结果的主要原因。

我有一个GRU模型,其中有12个功能作为输入,我正在尝试预测输出功率。我真的不明白我是否选择

  • 1层或5层
  • 50个神经元或512个神经元
  • 批处理量较小的10个纪元或批处理量较大的100个纪元
  • 不同的优化器和激活功能
  • Dropput和L2还原
  • 添加更密集的图层。
  • 增减学习率

  • 我的结果始终是相同的,没有任何意义,我的损失和val_loss损失在前两个时期非常陡峭,然后在其余的val_loss波动很小的情况下变得恒定

    这是我的代码和损失图,以及需要时的数据框:

    数据框1:https://drive.google.com/file/d/1I6QAU47S5360IyIdH2hpczQeRo9Q1Gcg/view
    数据框2: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()
    

    python - 神经网络结果始终相同-LMLPHP

    最佳答案

    我认为GRU的单位在那里很高。 GRU单元过多可能会导致梯度消失的问题。首先,我将选择30至50单位的GRU。另外,学习率也更高。 G。 0.001。

    如果该数据集是公开可用的,请给我链接,以便我可以对此进行试验并通知您。

    09-18 11:43