我有以下代码用于训练基于一些数字的模型:
from numpy import loadtxtimport numpy as npfrom keras.models import Sequentialfrom keras.layers import Densefrom time import sleepdataset = loadtxt("data.csv", delimiter=",")X = dataset[:,0:2]y = dataset[:,2]model = Sequential()model.add(Dense(196, input_dim=2, activation='relu'))model.add(Dense(128, activation='relu'))model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])model.fit(X, y, epochs=600, batch_size=10)_, accuracy = model.evaluate(X, y)print('Accuracy: %.2f' % (accuracy*100))
供参考,这里是一些提供给模型的数据:
433,866,1299,1732421,842,1263,1684443,886,1329,1772142,284,426,568437,874,1311,1748455,910,1365,1820172,344,516,688219,438,657,876101,202,303,404289,578,867,1156110,220,330,440421,842,1263,1684472,944,1416,1888121,242,363,484215,430,645,860134,268,402,536488,976,1464,1952467,934,1401,1868418,836,1254,1672134,268,402,536241,482,723,964116,232,348,464395,790,1185,1580438,876,1314,1752396,792,1188,158457,114,171,228218,436,654,872372,744,1116,1488305,610,915,1220462,924,1386,1848455,910,1365,182042,84,126,168347,694,1041,1388394,788,1182,1576184,368,552,736302,604,906,1208326,652,978,1304333,666,999,1332335,670,1005,1340176,352,528,704168,336,504,67262,124,186,24826,52,78,104335,670,1005,1340
(前三个数字应作为输入,最后一个数字作为输出)Keras程序一直在训练,但准确度始终为0。我做错了什么?
回答:
正如评论中所讨论的,这是一个回归问题(不是分类问题),所以我们可以使用例如mse
(均方误差)作为损失函数,并将最后一层的激活函数改为linear
:
X = dataset[:,0:3]y = dataset[:,3]model = Sequential()model.add(Dense(196, input_dim=3, activation='relu'))model.add(Dense(128, activation='relu'))model.add(Dense(1, activation='linear'))model.compile(loss='mse', optimizer='adam')model.fit(X, y, epochs=600, batch_size=10)