Как повысить точность с помощью мультиклассовой классификации keras? - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь сделать мультиклассовую классификацию с tf keras. У меня всего 20 ярлыков, и у меня есть данные 63952, и я попробовал следующий код

features = features.astype(float)
labels = df_test["label"].values

encoder = LabelEncoder()
encoder.fit(labels)
encoded_Y = encoder.transform(labels)
dummy_y = np_utils.to_categorical(encoded_Y)

Затем

def baseline_model():
    model = Sequential()
    model.add(Dense(50, input_dim=3, activation='relu'))
    model.add(Dense(40, activation='softmax'))
    model.add(Dense(30, activation='softmax'))
    model.add(Dense(20, activation='softmax'))

    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

наконец

history = model.fit(data,dummy_y, 
                    epochs=5000,
                    batch_size=50,
                    validation_split=0.3,
                    shuffle=True,
                    callbacks=[ch]).history

У меня очень плохая точность с этим. Как я могу улучшить это?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

softmax активации в промежуточных слоях не имеют никакого смысла вообще. Измените все из них на relu и оставьте softmax только в последнем слое.

Сделав это, и если вы все еще получаете неудовлетворительную точность, поэкспериментируйте с различными архитектурами (разным числом слоев и узлов) с небольшим количеством эпох (скажем, ~ 50), чтобы получить представление о том, как ведет себя ваша модель, прежде чем приступить к полному соответствию со своими 5000 эпохами.

1 голос
/ 29 апреля 2020

Вы не предоставили нам важную информацию, но вот некоторые рекомендации:
1. Сократите количество слоев Dense - у вас есть сложный слой с небольшим количеством данных (63k немного меньше). Возможно, вы столкнулись с перегрузкой данных вашего поезда.
2. Проверяли ли вы, что тест имеет то же распределение, что и ваш поезд?
3. Избегайте использования softmax в средних слоях Dense - softmax следует использовать в финале слой, используйте вместо этого сигмоид или relu.
4. Составьте график потерь как функцию кривой эпохи и проверьте, уменьшается ли она - тогда вы сможете понять, слишком ли велика ваша скорость обучения или слишком мала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...