Многоуровневая классификация последовательности, как это сделать? - PullRequest
0 голосов
/ 22 мая 2019

Я довольно новичок в области глубокого обучения, особенно Керас. Здесь у меня есть простая проблема классификации, и я не знаю, как ее решить. Что я не понимаю, так это общий процесс классификации, например, преобразование входных данных в тензоры, метки и т. Д.

Допустим, у нас есть три класса, 1, 2, 3.

Существует последовательность классов, которую необходимо классифицировать как один из этих классов. Набор данных, например,

  • Последовательность 1, 1, 1, 2 помечена 2
  • Последовательность 2, 1, 3, 3 помечена 1
  • Последовательность 3, 1, 2, 1 помечена 3

и т. Д.

Это означает, что входной набор данных будет

[[1, 1, 1, 2],
 [2, 1, 3, 3],
 [3, 1, 2, 1]]

и метка будет

[[2],
 [1],
 [3]]

Теперь одна вещь, которую я понимаю, это горячее кодирование класса. Поскольку у нас есть три класса, каждый 1 будет преобразован в [1, 0, 0], 2 будет [0, 1, 0] и 3 будет [0, 0, 1]. Преобразование приведенного выше примера даст набор данных 3 x 4 x 3 и метку 3 x 1 x 3.

Другое, что я понимаю, это то, что последний слой должен быть слоем softmax. Таким образом, если появятся такие тестовые данные, как (например, [1, 2, 3, 4]), они будут мягкими и будут рассчитаны вероятности этой последовательности, относящейся к классу 1, 2 или 3.

Я прав? Если да, можете ли вы дать мне объяснение / пример процесса классификации этих последовательностей?

Заранее спасибо.

1 Ответ

1 голос
/ 22 мая 2019

Вот несколько пояснений, о которых вы, кажется, спрашиваете.

  • Этот момент сбил с толку, поэтому я удалил его.
  • Если ваши входные данные имеют форму (4), тогда ваш входной тензор будет иметь форму (batch_size, 4).
  • Softmax - это правильная активация для вашего слоя прогнозирования (последнего) с учетом желаемого результата, поскольку у вас есть проблема классификации с несколькими классами.Это приведет к выводу формы (batch_size, 3).Это будут вероятности каждой потенциальной классификации, суммирующие по одному для всех классов.Например, если классификация - класс 0, то одно предсказание может выглядеть примерно так: [0.9714,0.01127,0.01733].
  • Размер партии не жестко задан в сети, поэтому он представлен в модели.() как None.Например, форму вывода последнего уровня сети можно записать (None, 3).
  • Если у вас нет подходящей альтернативы, для слоя прогнозирования softmax требуется функция потерь categorical_crossentropy.
  • АрхитектураСеть остается на ваше усмотрение, но вам, по крайней мере, понадобятся выход и выход.В Керасе (как вы отметили) есть несколько способов сделать это.Вот несколько примеров:

Пример с последовательным Keras

model = Sequential()
model.add(InputLayer(input_shape=(4,))) # sequence of length four
model.add(Dense(3, activation='softmax')) # three possible classes

Пример с функциональным Keras

input_tensor = Input(shape=(4,))
x = Dense(3, activation='softmax')(input_tensor)
model = Model(input_tensor, x)

Пример, включающий форму входного тензора в первом функциональном слое (или последовательный или функциональный):

model = Sequential()
model.add(Dense(666, activation='relu', input_shape=(4,)))
model.add(Dense(3, activation='softmax'))

Надеюсь, это поможет!

...