机器学习准确度显示0

时间:2017-02-23 08:11:28

标签: python machine-learning

我需要帮助培训机器学习模型的准确性。

我的训练输入是几个包含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%

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

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

你想预测数值,所以你应该使用像均方根误差这样的东西。

准确性不会因为你没有尝试预测一个类而是一个实数值而产生敏感。它很难准确地预测好的。准确度用于例如二进制交叉熵,然后我们可以将0.7的输出分类为类1.或0.2属于0类。

还有一条评论:为什么要预测随机值?它无法工作......网络需要识别模式,随机目标中没有模式。

我希望这对你有所帮助。