나는 Keras와 더미 데이터 세트로 놀고있었습니다. RBF 커널이있는 표준 SVM에 비해 신경 네트워크가 얼마나 잘 작동하는지보고 싶었습니다. 과제는 간단합니다 : {0,1,2} 집합에있는 20 차원 벡터의 클래스를 예측합니다.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
더미 데이터를 제; 신경 네트워크 빨려; SVM은 그것을 쫓아 냈다. 제발 도와주세요
신경망은 규모에 민감합니다. 데이터를 표준화 해보십시오. – Wboy
왜 MSE 손실입니까? 교차 엔트로피는 분류를 위해 훨씬 잘 작동합니다. –