Skip to main content
 首页 » 编程设计

python之Keras:准确度保持为零

2025年05月04日18jiqing9006

我正在尝试使用 Keras 进行机器学习。

我不是数学家,我对神经网络的工作原理只有基本的了解(哈哈明白了吗?),所以请放轻松。

这是我当前的代码:

from keras.utils import plot_model 
from keras.models import Sequential 
from keras.layers import Dense 
from keras import optimizers 
import numpy 
 
# fix random seed for reproducibility 
numpy.random.seed(7) 
 
# split into input (X) and output (Y) variables 
X = [] 
Y = [] 
count = 0 
 
while count < 10000: 
    count += 1 
    X += [count / 10000] 
    numpy.random.seed(count) 
    #Y += [numpy.random.randint(1, 101) / 100] 
    Y += [(count + 1) / 100] 
print(str(X) + ' ' + str(Y)) 
 
# create model 
model = Sequential() 
model.add(Dense(50, input_dim=1, kernel_initializer = 'uniform', activation='relu')) 
model.add(Dense(50, kernel_initializer = 'uniform', activation='relu')) 
model.add(Dense(1, kernel_initializer = 'uniform', activation='sigmoid')) 
 
# Compile model 
opt = optimizers.SGD(lr=0.01) 
model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy']) 
 
# Fit the model 
model.fit(X, Y, epochs=150, batch_size=100) 
 
# evaluate the model 
scores = model.evaluate(X, Y) 
predictions = model.predict(X) 
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) 
print (str(predictions)) 
##plot_model(model, to_file='C:/Users/Markus/Desktop/model.png') 

准确度保持为零,预测是 1 的数组。我做错了什么?

请您参考如下方法:

据我所知,您正在尝试解决回归问题(浮点函数输出)而不是分类问题(一个热向量样式输出/将输入分类)。

你的 sigmoid 最后一层只会给出 0 到 1 之间的输出,这显然限制了你的神经网络预测 Y 值所需范围的能力,因为 Y 值会上升得更高。你的 NN 正试图尽可能接近,但你限制了它!输出层中的 Sigmoid 适用于单类是/否输出,但不适用于回归。

因此,您希望最后一层具有线性激活,其中输入只是求和。像这样的东西而不是乙状结肠。 model.add(Dense(1, kernel_initializer='lecun_normal', activation='linear'))

那么它可能会起作用,至少在学习率足够低的情况下。

Google“keras 回归”以获得有用的链接。