Eu estou trabalhando em pesquisa, onde necessidade de uma classificar de WINNER três event = ( 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
Meu modelo atual é:
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
- Não sei se esse é o correto para a classificação de várias classes
- Qual é a melhor configuração para a classificação binária?
EDIT: # 2 - assim?
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
Espanhol
fonte
fonte
activation='softmax'
e escolha de compilaçãoloss='categorical_crossentropy'
? Na IMO, suas escolhas são boas para um modelo prever várias classes mutuamente exclusivas. Se você deseja aconselhamento sobre todo o modelo, isso é bem diferente e deve explicar mais sobre quais são suas preocupações, caso contrário, há muito o que explicar em uma única resposta.architecture
camadas principalmente. Algum conselho para a minha pergunta # 2?activation='sigmoid'
eloss='binary_crossentropy'
activation='sigmoid'
na camada de saída . A camada escondida pode ficar como'relu'
se você gosta (embora eu provavelmente começaria com'tanh'
para este problema, que é preferência pessoal com muito pouco apoio da teoria)Respostas:
Suas escolhas
activation='softmax'
na última camada e na compilaçãoloss='categorical_crossentropy'
são boas para um modelo prever várias classes mutuamente exclusivas.Em relação às escolhas mais gerais, raramente existe uma maneira "correta" de construir a arquitetura. Em vez disso, isso deve ser algo que você testa com meta-parâmetros diferentes (como tamanhos de camada, número de camadas, quantidade de abandono) e deve ser orientado a resultados (incluindo quaisquer limites que você possa ter no uso de recursos para tempo / memória de treinamento use etc).
Use um conjunto de validação cruzada para ajudar a escolher uma arquitetura adequada. Uma vez feito, para obter uma medida mais precisa do desempenho geral do seu modelo, você deve usar um conjunto de testes separado. Os dados contidos em seu conjunto de treinamento separado do conjunto de CV devem ser usados para isso. Uma divisão razoável pode ser 60/20/20 train / cv / test, dependendo da quantidade de dados que você possui e da quantidade necessária para relatar um número final preciso.
Para a pergunta 2, você pode ter apenas duas saídas com um final softmax semelhante a agora ou uma camada final com uma saída
activation='sigmoid'
eloss='binary_crossentropy'
.Puramente pelo que parece funcionar com esses dados, sugiro tentar com
'tanh'
ou'sigmoid'
ativações na camada oculta, em vez de'relu'
, e também sugerir o aumento do número de neurônios ocultos (por exemplo, 100) e a redução da quantidade de abandono ( por exemplo, 0,2). Advertência: O pressentimento na arquitetura de rede neural não é científico. Experimente e teste.fonte