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