我正在尝试使用Keras来开发用于二进制分类目的的多层感知器,我对我获得的(差)性能(训练集的准确率为57%)感到惊讶 . 逻辑回归正确地对100%的样本进行分类 .
我创建了一个带有2个输入的数据集:输入A是一个正弦函数 . 输入B =输入A加滞后 . 当输入A> =输入B时,输出= 1.否则,输出= 0 .
SIN SIN-1 Direction
0 0 1
0.06279052 0 1
0.125333234 0.06279052 1
0.187381315 0.125333234 1
0.248689887 0.187381315 1
0.309016994 0.248689887 1
0.368124553 0.309016994 1
0.425779292 0.368124553 1
0.481753674 0.425779292 1
0.535826795 0.481753674 1
0.587785252 0.535826795 1
0.63742399 0.587785252 1
我遇到的问题类似于“Keras低精度分类任务”中描述的问题 . 答案指向数据集的方向,我不相信这里的问题 .
见下面的代码 . 我缺少什么来提高模型的准确性?将神经元添加到层或将输出层的激活功能更改为softmax并未产生任何更好的结果 .
import numpy
import pandas
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load the dataset
dataframe = pandas.read_csv('SIN.csv', usecols=[0,1,2], engine='python')
dataset = dataframe.values
X = dataset[:,0:2].astype(float)
Y = dataset[:,2].astype(int)
# split into train and test sets
train_size = int(len(X) * 0.80)
test_size = len(X) - train_size
Xtrain, Xtest = X[0:train_size,:], X[train_size:len(X),:]
Ytrain, Ytest = Y[0:train_size], Y[train_size:len(Y)]
print(len(Xtrain), len(Xtest))
# create and fit Multilayer Perceptron model
model = Sequential()
model.add(Dense(2, input_dim=2, init='uniform', activation='relu'))
model.add(Dense(2, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(Xtrain, Ytrain, nb_epoch=20, batch_size=2, verbose=2)
# Estimate model performance
trainScore = model.evaluate(Xtrain, Ytrain, verbose=2)
print('Train Score: %.2f' % trainScore[1])
testScore = model.evaluate(Xtest, Ytest, verbose=2)
print('Test Score: %.2f' % testScore[1])