gpt4 book ai didi

python - Keras 多层感知器训练数据显示损失 = nan

转载 作者:行者123 更新时间:2023-11-30 09:30:53 25 4
gpt4 key购买 nike

我在 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)

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

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]]

X_train.shape 为 (45000, 5)y_train.shape 为 (45000, 1)所有输出均为 NaN。如何解决?

最佳答案

代码中的突出问题是您没有清理数据。简单来说,神经网络的行为方式是将每层(即密集层)上的每个节点相乘。然后,想象一下:第一层有 32 个节点,最大正数约为 35,000。如果你将这个 35,000(或多或少取决于权重和偏差)本身乘以 32 次,你的数字将超过限制,并在几个时期内最终得到 NaN。

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

我建议将您的激活器更改为 sigmoid 函数。此函数缩放 1 到 -1 之间的数字(大部分)。这样,您的大输入将转换为绝对值小于 1 的数字。

希望这有帮助。

关于python - Keras 多层感知器训练数据显示损失 = nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com