Skip to main content
 首页 » 编程设计

python之机器学习精度显示 0

2025年05月04日23落叶

我在训练机器学习模型的准确性方面需要帮助。

我的训练输入是几个包含 500 个整数/数据的数组,我将其保存在名为“the_data”的数据集下的 hdf5 文件中。在这个例子中,我有 100 个数组。

[[1,2,3,...500], 
 [501,502,...1000], 
 [1001,...       ], 
 .... 
 ......          ]] 

输出是我事先生成的随机数,并将其保存为“output.txt”。它有 100 个随机数。

194521, 307329, 182440, 180444, 275690,...,350879 

下面是我根据http://machinelearningmastery.com/tutorial-first-neural-network-python-keras/修改的脚本

import h5py 
from keras.models import Sequential 
from keras.layers import Dense 
 
seed = 7 
np.random.seed(seed) 
 
input_data = h5py.File('test.h5', 'r') 
output_data = open("output.txt", "r") 
 
X = input_data['the_data'][:] 
Y = output_data.read().split(',') 
 
model = Sequential() 
model.add(Dense(500, input_dim=500, init='normal', activation='relu')) 
model.add(Dense(100, init='normal', activation='relu')) 
model.add(Dense(60, init='normal', activation='relu')) 
model.add(Dense(1, init='normal', activation='sigmoid')) 
 
model.compile(loss='binary_crossentropy', optimizer='adamax', metrics=['accuracy']) 
model.fit(X, Y, nb_epoch=500, batch_size=10) 
scores = model.evaluate(X, Y) 
 
print("%s: %.2f%% , %s: %.2f%%" % (model.metrics_names[0], scores[0]*100, model.metrics_names[1], scores[1]*100)) 

我得到的结果是这样的

Epoch 500/500 
100/100 [==============================] - 0s - loss: -4851446.0896 - acc: 0.0000e+00 
100/100 [==============================] - 0s 
loss: -485144614.93% , acc: 0.00% 

有没有人想过为什么会这样?

感谢您的帮助。

请您参考如下方法:

你知道二元交叉熵是什么吗?

这是针对二进制(0 或 1)目标的损失函数。损失是 output 或 output - 1 的对数,具体取决于目标值。 所以你不能在你的情况下应用它。

您想预测数值,因此您应该使用均方根误差之类的东西。

准确性也没有意义,因为您不是要预测一个类别,而是要预测一个实数值。它很少会准确地预测出好的结果。例如,精度与二元交叉熵一起使用,然后我们可以将 0.7 的输出分类为 1 类。或者 0.2 为 0 类。

还有一条评论:你为什么要预测随机值?它行不通……网络需要识别模式,而随机目标中没有模式。

希望对您有所帮助。