Я работаю на исследования, где необходимо классифицировать один из WINNER три события = ( 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
Моя текущая модель:
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
- Я не уверен, что это правильный выбор для классификации нескольких классов
- Какова наилучшая установка для бинарной классификации?
РЕДАКТИРОВАТЬ: № 2 - Как это?
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
источник
источник
activation='softmax'
и выбор компиляцииloss='categorical_crossentropy'
? ИМО, ваш выбор для них хорош для модели, которая предсказывает несколько взаимоисключающих классов. Если вам нужен совет по всей модели, это совсем другое дело, и вы должны объяснить больше о том, что вас беспокоит, иначе в одном ответе слишком много объяснений.architecture
слоях в основном. Любой совет для моего вопроса № 2?activation='sigmoid'
иloss='binary_crossentropy'
activation='sigmoid'
в выходном слое. Скрытый слой может остаться таким, как'relu'
вам нравится (хотя я, вероятно, начну с'tanh'
этой проблемы, это личное предпочтение с очень небольшой поддержкой теории)Ответы:
Ваш выбор
activation='softmax'
на последнем уровне и выбор компиляцииloss='categorical_crossentropy'
хороши для модели, чтобы предсказать несколько взаимоисключающих классов.Что касается более общего выбора, то редко существует «правильный» способ построения архитектуры. Вместо этого это должно быть что-то, что вы тестируете с различными метапараметрами (такими как размеры слоев, количество слоев, количество выпадений) и должны быть ориентированы на результаты (включая любые ограничения, которые вы можете иметь на использование ресурсов для обучения времени / памяти). использовать и т. д.).
Используйте набор перекрестной проверки, чтобы помочь выбрать подходящую архитектуру. После этого, чтобы получить более точную оценку общей производительности вашей модели, вы должны использовать отдельный набор тестов. Для этого следует использовать данные, хранящиеся в вашем учебном наборе отдельно от набора CV. Разумное разделение может составлять 60/20/20 train / cv / test, в зависимости от того, сколько у вас данных и сколько вам нужно, чтобы сообщить точный окончательный показатель.
Для вопроса №2 вы можете либо просто иметь два выхода с финалом softmax, аналогичным текущему, либо у вас может быть последний слой с одним выходом,
activation='sigmoid'
иloss='binary_crossentropy'
.Чисто из интуитивного ощущения от того, что может работать с этими данными, я бы предложил попробовать
'tanh'
или'sigmoid'
активировать в скрытом слое вместо'relu'
, и я бы также предложил увеличить количество скрытых нейронов (например, 100) и уменьшить количество выбывших ( например, 0,2). Предостережение: интуитивное восприятие архитектуры нейронной сети не является научным. Попробуйте и проверьте это.источник