回归损失函数为nan

数据挖掘 Python 神经网络 喀拉斯 回归
2022-02-16 23:36:14

一般来说,我是 ANN 和 DL 的初学者。我有一个以二维为目标的回归任务,我的数据集只有 46 个样本(我认为是小数据集)。我尝试了下面的代码,它只使用一个正常工作的输出进行回归。

当我更改为二维回归时,我的损失函数等于 NaN。我试图更改优化器并修复辍学率,但没有任何改变,有什么解决方案吗?

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

#load data
dataframe = pandas.read_excel("data1.xlsx")
dataframe.isnull().any()

dataset = dataframe.values

X = dataset[:, 0:5]
Y = dataset[:,5:7]

def baseline_model():
    #create model
    model = Sequential()
    model.add(Dense(10, input_dim=5, kernel_initializer='normal', activation 
='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(2, kernel_initializer='normal'))

    #compile model
    #model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model



#fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)

estimators=[]
estimators.append(('standardize', StandardScaler()))
estimators.append(('mlp', KerasRegressor(build_fn=baseline_model, epochs=50, batch_size=32, verbose=0)))
pipeline = Pipeline(estimators)

kfold = KFold(n_splits=10, random_state = seed)
results = cross_val_score(pipeline, X, Y, cv=kfold)

print ("Result: %.2f (%.2f) MSE" %(results.mean(), results.std()))
1个回答

我遇到了同样的问题并在很多地方搜索了解决方案。但显然,这是因为我在数据集中放置了错误的标签。它应该是 0,1,2,... n 但我做了 1,2,3,....n。应该从零开始。在我更改标签后,它现在运行良好。