我正在玩Keras和一個虛擬數據集。我想看看與帶有RBF內核的標準SVM相比,神經網絡會做得更好。該任務很簡單:預測集合{0,1,2}中的20-dim向量的類別。Keras低精度分類任務
我注意到神經網絡確實很可怕。 SVM的正確率約爲90%,而神經網絡的正確率爲40%。我在代碼中做錯了什麼?這很可能是我的錯誤,但在NN上嘗試了幾個小時後,我放棄了。
代碼
from sklearn.datasets import make_multilabel_classification
from sklearn.svm import SVC
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD, RMSprop
from keras.utils import np_utils
from keras.datasets import mnist
# generate some data
dummyX, dummyY = make_multilabel_classification(n_samples=4000, n_features=20, n_classes=3)
# neural network
model = Sequential()
model.add(Dense(20, input_dim=20))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(20))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['accuracy'])
X_train, X_test, y_train, y_test = train_test_split(dummyX, dummyY, test_size=0.20, random_state=42)
model.fit(X_train, y_train,nb_epoch=20, batch_size=30, validation_data=(X_test, y_test))
# Epoch 20/20
# 3200/3200 [==============================] - 0s - loss: 0.2469 - acc: 0.4366 - val_loss: 0.2468 - val_acc: 0.4063
# Out[460]:
# SVM - note that y_train and test are binary label. I haven't included the multi class converter code here for brevity
svm = SVC()
svm.fit(X_train, y_train)
svm.score(X_test, y_test)
# 0.891249
TL; DR
製成僞數據;神經網絡被吸引;支持向量機踢了它的武裝。請幫助
神經網絡是敏感的規模。嘗試規範化你的數據。 – Wboy
爲什麼MSE損失?交叉熵在分類上效果更好。 –