Двоичная классификация NN с неверным прогнозированием выходного слоя Softmax

Я знаю, что это не проблема, с которой вы столкнулись, однако другая причина, по которой это может произойти, заключается в том, что у вас есть нефонический поток, открытый в вашем приложении.

using System;
using System.Threading;
using System.Windows.Forms;

namespace Sandbox_Form
{
    static class Program
    {
        private static Thread thread;

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            thread = new Thread(BusyWorkThread);
            thread.IsBackground = false;
            thread.Start();

            Application.Run(new Form());

        }

        public static void BusyWorkThread()
        {
            while (true)
            {
                Thread.Sleep(1000);
            }
        }
    }
}

Когда IsBackground есть false, это будет поддерживать вашу программу открытой до тех пор, пока поток не завершится, если вы установите IsBackground на true, нить не остановит программу. Такие вещи, как BackgroundWoker, ThreadPool и Task, внутренне используют поток с IsBackground, установленным на true.

0
задан Markoe7 16 January 2019 в 22:52
поделиться

1 ответ

Когда вы используете cross_entropy_with_logits_v2, важно, чтобы вы пропустили логит. Это называется logit к предыдущему значению перед применением softmax. Должно быть так:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=regular_prediction, labels=y))

Эта функция выполняет softmax, а затем cross_entropy. Это так, потому что, если они применяются отдельно в обратном распространении, вы можете иметь числовую нестабильность. Но при одновременном применении он упрощается при обратном распространении и становится на 100% стабильным.

РЕДАКТИРОВАТЬ: cross_entropy_with_logits_v2 представляет собой слой, который выполняет следующие cross_entropy (softmax (x), y). Проблема в том, что в обратном направлении эта комбинация cross_entropy и затем softmax не является численно устойчивой. Вот почему вы получаете нанс. Когда оба они объединены, упрощение выполняется следующим образом: https://deepnotes.io/softmax-crossentropy

Если применить один, а затем другой, тензор потока не будет иметь умение упрощать.

0
ответ дан Adria Ciurana 16 January 2019 в 22:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: