keras 我所有的结果都有LSTM过拟合问题,有人能检查我的代码是否有任何错误吗?[已关闭]

yacmzcpb  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(141)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3小时前关门了。
Improve this question
我很感激你花时间考虑我的问题。
我有一个问题与lstm,因为它给了我overfiting为我所有的结果。我尝试了不同的技术。
有人可以检查我的代码,看看我是否写错了行吗?

## load input stages
dfList = []
rowsCounts=[]
for i in range(1,41):
    rowsCounts.append(pd.read_csv(r'C:\Users\wannees.alkhayyali\OneDrive - University of Calgary\PFPD\Field Data\COP\inj data\stage_'+str(i)+'.csv',usecols = [i for i in range(10)]).shape[0])
maxRowsCount=max(rowsCounts)

# Fill rows with zero to ensure that each stage has the same length

for i in range(1,41):
    df=pd.read_csv(r'C:\Users\wannees.alkhayyali\OneDrive - University of Calgary\PFPD\Field Data\COP\inj data\stage_'+str(i)+'.csv',usecols = ['stage_clean_cum_m3','clean_rate_m3_per_min','proppant_con (kg/m3)'])
    df_final = df.reindex(range(maxRowsCount), fill_value=0)
  
# Normalize
    min_max_scaler = preprocessing.MinMaxScaler()
    x_scaled = min_max_scaler.fit_transform(df_final.values)
    dfList.append(x_scaled)
dataSet = np.array(dfList)

dfOutput=pd.read_csv(r'C:\Users\wannees.alkhayyali\OneDrive - University of Calgary\PFPD\Field Data\COP\inj data\output.csv')
Y = np.array(dfOutput.values)

#Split into train and test sets
Xtrain=dataSet[0:30]
Xtest=dataSet[30:]
Ytrain=Y[0:30]
Ytest=Y[30:]

#Design network
model = Sequential()
model.add(LSTM(50, return_sequences=True, kernel_regularizer=l2(0.01), recurrent_regularizer=l2(0.01), bias_regularizer=l2(0.01), input_shape=(maxRowsCount, 3)))
model.add(LSTM(20))
# model.add(LSTM(50, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
opt= optimizers.Adam(learning_rate=0.0001)
model.compile(optimizer=opt, loss='mse')
kqqjbcuj

kqqjbcuj1#

您的算法过拟合,因为您使用的数据集太小。您正在对整个数据集进行切片,并在前30个项目上训练神经网络,然后使用其余项目进行测试。您宁愿执行相反的操作,或为训练集选择较大的切片:

train_set_size = 5000 # A good amount of items
Xtrain=dataSet[0:train_set_size]
Xtest=dataSet[train_set_size:]
Ytrain=Y[0:train_set_size]
Ytest=Y[train_set_size:]

或者您可以仅交换train和test,这样train数据集将包含N-30项:

Xtest=dataSet[0:30]
Xtrain=dataSet[30:]
Ytest=Y[0:30]
Ytrain=Y[30:]

请注意,如果数据集太小,它无论如何都会过拟合。您可以使用data augmentation的一些技术,但有一定的限制。在大多数情况下,您需要一个新的数据集。

相关问题