Fan*_*ang 2 python machine-learning
我需要有关训练机器学习模型的准确性的帮助。
我的训练输入是几个包含 500 个整数/数据的数组,我将其保存在名为“the_data”的数据集下的 hdf5 文件中。在此示例中,我有 100 个数组。
[[1,2,3,...500],
[501,502,...1000],
[1001,... ],
....
...... ]]
Run Code Online (Sandbox Code Playgroud)
输出是我事先生成的随机数并将其保存为“output.txt”。它有 100 个随机数。
194521, 307329, 182440, 180444, 275690,...,350879
Run Code Online (Sandbox Code Playgroud)
下面是我基于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))
Run Code Online (Sandbox Code Playgroud)
我得到的结果是这样的
Epoch 500/500
100/100 [==============================] - 0s - loss: -4851446.0896 - acc: 0.0000e+00
100/100 [==============================] - 0s
loss: -485144614.93% , acc: 0.00%
Run Code Online (Sandbox Code Playgroud)
有谁想过为什么会发生这种情况?
感谢您的帮助。
你知道什么是二元交叉熵吗?
它是针对二进制(0 或 1)目标而设计的损失函数。损失是 或 的某个对数,output具体output - 1取决于目标值。所以你不能将它应用于你的情况。
您想要预测数值,因此您应该使用均方根误差之类的东西。
准确性也没有意义,因为您不是在尝试预测类别,而是在尝试预测实数值。它很少能准确地预测出好的结果。例如,精度与二元交叉熵一起使用,然后我们可以将 0.7 的输出分类为 1 类。或者将 0.2 分类为 0 类。
另一条评论:你为什么要预测随机值?它不起作用……网络需要识别模式,而随机目标中没有模式。
我希望这对你有一点帮助。