4

Я хочу разработать классификатор с несколькими метками с TensorFlow, я хочу сказать, что существует несколько ярлыков, которые содержат несколько классов. Для иллюстрации вы можете изображения ситуация, как:Многоклеточный классификатор в Tensorflow

  • этикетки-1 классы: освещение дождь, дождь, дождь, частичный не дождь
  • этикетки-2 классов: солнечно, переменная облачность, облачно, очень облачно.

Я хочу классифицировать эти две метки с помощью нейронной сети. На данный момент я использовал разные метки классов для каждого класса (label-1, label-2). Это означает, что у меня есть 4 x 4 = 16 разных ярлыков.

Тренируя свою модель с

убытком

cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1])) 

# prediction is sofmaxed 
loss = cross_entropy + regul * schema['regul_ratio'] # regul things is for regularization 
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) 

Однако я считаю, что обучение мульти-лейбл будет работать лучше в таком состоянии.

  • Мои функции будут [n_samples, n_features]
  • Мои метки будут [n_samples, n_classes, 2]

n_samples из [x1, x2, x3, x4 ...] # особенности

n_samples из [[0, 0, 0, 1], [0, 0, 1, 0]] # не дождя и облачно

Как я могу сделать SoftMax распределения вероятностей предсказатель с tensorflow. Есть ли какой-либо рабочий пример для многоквартирной проблемы, такой как этот. Как будет выглядеть мой тензор потерь?

ответ

4

Почему бы просто не создать сеть для двух разных выходов?

сеть -> prediction1 и prediction2

где prediction1 и prediction2 оба [#, #, #, #], но то, что я описываю ниже работает, даже если они разных размеров.

Тогда просто запустить

loss1 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction1, labels_1)) 
loss2 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction2, labels_2)) 

loss = loss1 + loss2 
Смежные вопросы