Pracuję na badania, gdzie potrzeba klasyfikowania jednego zwycięzcy trzech zdarzeń = ( win
, draw
, lose
)
WINNER LEAGUE HOME AWAY MATCH_HOME MATCH_DRAW MATCH_AWAY MATCH_U2_50 MATCH_O2_50
3 13 550 571 1.86 3.34 4.23 1.66 2.11
3 7 322 334 7.55 4.1 1.4 2.17 1.61
Mój obecny model to:
def build_model(input_dim, output_classes):
model = Sequential()
model.add(Dense(input_dim=input_dim, output_dim=12, activation=relu))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adadelta')
return model
- Nie jestem pewien, czy jest to poprawna klasyfikacja dla wielu klas
- Jaka jest najlepsza konfiguracja do klasyfikacji binarnej?
EDYCJA: # 2 - Podoba ci się?
model.add(Dense(input_dim=input_dim, output_dim=12, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')
python
neural-network
classification
clustering
keras
SpanishBoy
źródło
źródło
activation='softmax'
i wyboru kompilacjiloss='categorical_crossentropy'
? IMO, twoje wybory dla nich są dobre dla modelu do przewidywania wielu wzajemnie wykluczających się klas. Jeśli potrzebujesz porady na temat całego modelu, który jest zupełnie inny, i powinieneś wyjaśnić więcej o swoich obawach, w przeciwnym razie w jednej odpowiedzi jest zbyt wiele do wyjaśnienia.architecture
głównie o warstwy. Jakaś rada na moje pytanie nr 2?activation='sigmoid'
iloss='binary_crossentropy'
activation='sigmoid'
w warstwie wyjściowej . Ukryta warstwa może pozostać tak'relu'
, jak chcesz (chociaż prawdopodobnie zacznę od'tanh'
tego problemu, to jest osobiste preferencje przy bardzo niewielkim wsparciu teorii)Odpowiedzi:
Wybory
activation='softmax'
w ostatniej warstwie i wybór kompilacjiloss='categorical_crossentropy'
są dobre dla modelu do przewidywania wielu wykluczających się klas.Jeśli chodzi o bardziej ogólne wybory, rzadko istnieje „właściwy” sposób na zbudowanie architektury. Zamiast tego powinno to być coś, co testujesz przy użyciu różnych meta-parametrów (takich jak rozmiary warstw, liczba warstw, ilość rezygnacji) i powinno być uzależnione od wyników (w tym wszelkich ograniczeń, jakie możesz mieć na wykorzystanie zasobów do szkolenia / pamięci używać itp.).
Użyj zestawu weryfikacji krzyżowej, aby wybrać odpowiednią architekturę. Po zakończeniu, aby uzyskać dokładniejszy pomiar ogólnej wydajności modelu, należy użyć osobnego zestawu testów. W tym celu należy wykorzystać dane wyciągnięte z zestawu treningowego oddzielnie od zestawu CV. Rozsądny podział może wynosić 60/20/20 pociąg / CV / test, w zależności od tego, ile masz danych i ile potrzebujesz, aby podać dokładną końcową liczbę.
W przypadku pytania nr 2 możesz albo mieć dwa wyjścia z końcową wersją softmax podobną do teraz, albo możesz mieć ostatnią warstwę z jednym wyjściem,
activation='sigmoid'
iloss='binary_crossentropy'
.Z czystego wyczucia co do tego, co może działać z tymi danymi, sugerowałbym próbowanie
'tanh'
lub'sigmoid'
aktywację w ukrytej warstwie, zamiast'relu'
, i sugerowałbym również zwiększenie liczby ukrytych neuronów (np. 100) i zmniejszenie ilości wypadania ( np. 0,2). Zastrzeżenie: przeczucie, że architektura sieci neuronowej nie jest naukowa. Wypróbuj i przetestuj.źródło