Skip to main content
 首页 » 编程设计

python之Keras 损失没有减少

2025年05月04日16zhwl

我试着用 breast Cancer Wisconsin 学习我的神经网络 (我将 "id" 列添加为索引,并使用 sklearn.preprocessing.LabelEncoder 将 "diagnosis" 列更改为 0 和 1),但是我的神经网络没有减少损失。

我尝试了其他优化器和损失函数,但这不起作用。

那是我的神经网络:

from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense, BatchNormalization, InputLayer 
import tensorflow.nn as tfnn 
 
model = Sequential() 
 
model.add(Dense(30, activation = tfnn.relu, input_dim = 30)) 
model.add(BatchNormalization(axis = 1)) 
 
model.add(Dense(60, activation = tfnn.relu)) 
model.add(BatchNormalization(axis = 1)) 
 
model.add(Dense(1, activation = tfnn.softmax)) 
 
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy']) 
model.fit(data, target, epochs = 6) 

我的输出:

Epoch 1/6 
569/569 [==============================] - 2s 3ms/sample - loss: 10.0025 - acc: 0.3726 
Epoch 2/6 
569/569 [==============================] - 0s 172us/sample - loss: 10.0025 - acc: 0.3726 
Epoch 3/6 
569/569 [==============================] - 0s 176us/sample - loss: 10.0025 - acc: 0.3726 
Epoch 4/6 
569/569 [==============================] - 0s 167us/sample - loss: 10.0025 - acc: 0.3726 
Epoch 5/6 
569/569 [==============================] - 0s 163us/sample - loss: 10.0025 - acc: 0.3726 
Epoch 6/6 
569/569 [==============================] - 0s 169us/sample - loss: 10.0025 - acc: 0.3726 

我似乎在几次迭代后 NN 停止学习(看看 epochs 学习的时间,在第一个 epoch 是 2s,在其他 epoch 是 0s,在第一个 epoch 处理数据的速度是 ms/sample,但在其他时代属于我们/样本) 感谢您的宝贵时间!

请您参考如下方法:

Softmax 有 sum=1。

您不能对 1 个单位使用 softmax。它永远是 1。

使用'sigmoid'。


还要小心 'relu'。它可能(运气好)落入“全零”区域并停止进化。

理想情况下,批量归一化应该在它之前(这样你保证总会有一些正数):

model = Sequential() 
 
model.add(Dense(30, input_dim = 30)) 
model.add(BatchNormalization(axis = 1)) 
model.add(Activation(tfnn.relu)) 
 
model.add(Dense(60) 
model.add(BatchNormalization(axis = 1)) 
model.add(Activation(tfnn.relu)) 
 
model.add(Dense(1, activation = tfnn.sigmoid))