Попробовали ли кто-нибудь попробовать многозадачное глубокое обучение с помощью TensorFlow? То есть, разделяя нижние слои, не разделяя верхние слои. Пример с простой иллюстрацией поможет многое.Многозадачное глубокое обучение с помощью Tensorflow
ответ
Существует аналогичный вопрос here, ответ используется keras.
Это похоже при использовании тензорного потока. Идея такова: мы можем определить несколько выходов сети и, следовательно, множественные функции потерь (цели). Затем мы говорим оптимизатору, чтобы свести к минимуму комбинированную функцию потерь, обычно используя линейную комбинацию.
Эта диаграмма рисуется в соответствии с этим paper.
Предположим, мы обучаем классификатор, который предсказывает цифру на изображении с максимальным количеством символов в 5 цифр на изображение. Здесь мы определили 6 выходных уровней: digit1
, digit2
, digit3
, digit4
, digit5
, length
. Уровень digit
должен выводить 0 ~ 9, если есть такая цифра, или X
(замените его реальным числом на практике), если в его позиции нет цифры . То же самое для length
, оно должно выводить 0 ~ 5, если изображение содержит 0 ~ 5 цифр, или X
, если оно содержит более 5 цифр.
Теперь тренировать его, мы просто сложить все перекрестную потерю энтропии каждой SoftMax функции:
# Define loss and optimizer
lossLength = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(length_logits, true_length)), 1e-37, 1e+37))
lossDigit1 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit1_logits, true_digit1)), 1e-37, 1e+37))
lossDigit2 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit2_logits, true_digit2)), 1e-37, 1e+37))
lossDigit3 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit3_logits, true_digit3)), 1e-37, 1e+37))
lossDigit4 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit4_logits, true_digit4)), 1e-37, 1e+37))
lossDigit5 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit5_logits, true_digit5)), 1e-37, 1e+37))
cost = tf.add(
tf.add(
tf.add(
tf.add(
tf.add(cL,lossDigit1),
lossDigit2),
lossDigit3),
lossDigit4),
lossDigit5)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)