Keras多层感知器序列数据显示损失=nan

2024-10-03 19:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在data_2.csv中有这样的数据

a   b   c   d        e         outcome
2   9   5   10175   3500        10000
1   3   4   23085   35000       34000
2   1   3   NaN     23283.33333 50000
....

我试着用MLP训练。列结果是目标输出。这是我的密码

df = pd.read_csv('C://data_2.csv')

sc = MinMaxScaler()
X = sc.fit_transform(df.drop('income', axis=1).astype(float))

test= df[['outcome']]

y = sc.fit_transform(test.astype(float))

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=20, test_size=0.1)

model = Sequential()
model.add(Dense(32,input_shape=(5,), activation='relu'))
model.add(Dense(32,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1,activation='softmax'))
model.compile(loss='mean_squared_error', optimizer='adam')
model.summary()

model.fit(X_train, y_train, epochs=200, batch_size=32, verbose=1)

y_pred = model.predict(X_test)

print("##########################################")
print(y_pred)

当我训练数据时,它显示了损失:像这样

Epoch 1/200
45000/45000 [==============================] - 2s 48us/step - loss: nan
Epoch 2/200
45000/45000 [==============================] - 2s 38us/step - loss: nan

当完成训练时,输出是这样的

##########################################
[[nan]
 [nan]
 [nan]
 ...
 [nan]
 [nan]
 [nan]]

列车形状为(45000,5) 列车形状为(45000,1) 所有输出均为NaN。如何修复


Tags: csv数据testadddfdatamodeltrain
1条回答
网友
1楼 · 发布于 2024-10-03 19:20:06

代码中的突出问题是没有清理数据。简单来说,神经网络的行为是将每一层(即密集层)上的每个节点相乘。然后,想象一下:你在第一层有32个节点,最大的正数大约是35000。如果你把这个35000(或多或少取决于权重和偏差)乘以32次,你的数目就会超过极限,在几个时期内就会变成NaN

因此,您的问题在于激活器relu。此激活器仅过滤正数(零或更大),并将任何负数转换为零。有了这个激活器,你的初始节点将有天文数字

我建议将激活器更改为sigmoid函数。此函数用于缩放介于1和-1之间的数字(大多数情况下)。这样,您的大输入将变成绝对值小于1的数字

希望这有帮助

相关问题 更多 >