Python 神经网络的结果总是一样的

Python 神经网络的结果总是一样的,python,machine-learning,keras,neural-network,Python,Machine Learning,Keras,Neural Network,编辑:任何感兴趣的人。我让它稍微好一点。我使用L2正则化器=0.0001,我添加了两个更密集的层,其中有3个和5个节点,没有激活函数。为第二层和第三层GRU添加了doupout=0.1。将批量大小减少到1000,并将损失函数设置为mae 重要提示:我发现我的测试数据帧WW与第一列相比非常小,这是它给我带来非常糟糕结果的主要原因 我有一个GRU模型,它有12个特征作为输入,我试图预测输出功率。我真的不明白我是否选择了 1层或5层 50个神经元或512个神经元 10个小批量时代或100个大批量时代

编辑:任何感兴趣的人。我让它稍微好一点。我使用L2正则化器=0.0001,我添加了两个更密集的层,其中有3个和5个节点,没有激活函数。为第二层和第三层GRU添加了doupout=0.1。将批量大小减少到1000,并将损失函数设置为mae

重要提示:我发现我的测试数据帧WW与第一列相比非常小,这是它给我带来非常糟糕结果的主要原因

我有一个GRU模型,它有12个特征作为输入,我试图预测输出功率。我真的不明白我是否选择了

  • 1层或5层
  • 50个神经元或512个神经元
  • 10个小批量时代或100个大批量时代
  • 不同的优化器和激活函数
  • 丢包与L2调节
  • 添加更密集的层
  • 提高和降低学习率
我的结果总是一样的,没有任何意义,我的损失和val_损失在前两个时期非常陡峭,然后在剩下的时间里,它变得恒定,val_损失波动很小

以下是我的代码和损失数字,以及我的数据帧(如果需要):

Dataframe1: 数据框架2:


我认为那里的GRU单位非常高。过多的GRU单元可能会导致消失梯度问题。开始时,我会选择30到50单位的GRU。此外,学习率略高。G0.001.


如果数据集是公开的,请你给我链接,这样我就可以在这方面进行实验,并通知你

我做得稍微好一点。我使用L2正则化器=0.0001,我添加了两个更密集的层,其中有3个和5个节点,没有激活函数。为第二层和第三层GRU添加了doupout=0.1。将批量大小减少到1000,并将损失函数设置为mae


重要提示:我发现我的测试数据帧与第一列相比非常小,这是它给我带来非常糟糕结果的主要原因。

看起来“学习”正在饱和。训练集和验证集的大小是多少?在运行代码时,对8140477个样本进行训练,对904498个样本进行验证。模型堆栈可能是局部最小值?我会尝试提高学习速度,看看它是否表现得不同。此外,从50个GRU单元到1个密集单元似乎是一个很大的进步,尝试在两者之间放置另一个密集层和/或一些衰减。如果中间的密集层也有1个单元,我选择了1个单元,因为功率是唯一被预测的?AliYoussef拥有第二个密集层的目的是从50个节点过渡到一个更平滑的节点,所以我会沿着5-15个节点尝试一些东西,输出节点将保持原样,因为正如你所说的,你有一个输出。我认为像你那样增加辍学率是可以的。看看学习率的变化是否有帮助也会很有趣,你试过了吗?我现在会这样做,我是否应该添加另一个密集层,是否应该在第二层添加0.1的衰减,以及是否应该使用l2正则化。另外,这里是第一个拥有全部12个功能的数据帧和一个拥有强大功能的数据帧。感谢分享数据。您可以逐个更改每个超参数并查看结果。
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()