WebHU - Programozási kérdések és válaszok

Hogyan kerülhetem el az ismétlődő gyűjtemények hozzáadását a Tensorflow-ban?

Tensorflow kezdő itt.

Van egy kódrészletem, amely képzést és érvényesítést végez (együtt) egy képkészleten. A betanítási ciklusban időnként végrehajtok egy érvényesítést, és megkapom a veszteséget egy érvényesítési adatkészletből. Összefoglalom az eredményeket, és tensorboardot használok a vizualizáció megtekintéséhez.

A problémám az, hogy kétszer számolom a veszteségemet, és nem kellene. A kódom egyértelművé teszi, hogy mi történik

Szerezzen be néhány képet, amely már fel van osztva képzési és érvényesítési készletekre, és építse fel a neurális hálót is:

        images, labels = (
            self._input_pipeline(filenames, self.model_config.BATCH_SIZE))
        v_images, v_labels = (
            self._input_pipeline(v_filenames, self.model_config.BATCH_SIZE))
        logits = self.build_nets(images)
        tf.get_variable_scope().reuse_variables()
        v_logits = self.build_nets(v_images)

Állítsa be a veszteségfüggvényt:

        _ = self.set_loss(logits, labels)
        validation_step = self.set_loss(v_logits, v_labels)

A set_loss így néz ki:

def set_loss(self, y, y_):
    cross_entropy_sum = (
                tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=y_)))
    tf.add_to_collection('cross_entropy_loss', cross_entropy_sum)
    return tf.losses.get_losses()

A probléma az, hogy a cross_entropy_loss kétszer hozzáadódik a gyűjteményhez, így a keresztentropia veszteség kétszeresét kapom.

A 'cross_entropy_loss' gyűjteményt a fő rutinban használják a cross_entropy_total kiszámításához:

        get_cross_entropy = tf.get_collection('cross_entropy_loss')
        cross_entropy_total = tf.add_n(get_cross_entropy, name='cross_entropy_loss_across_all_gpus')
        tf.summary.scalar("cross entropy loss", cross_entropy_total)

Egyetlen összefoglaló művelet generálja az összefoglalót:

        summary_op = tf.summary.merge_all()

A képzés lépése így néz ki:

        train_step = (
            tf.train.GradientDescentOptimizer(model_config.INITIAL_LEARNING_RATE).minimize(cross_entropy_total))

Íme az utolsó darab, a képzési és az érvényesítési darabok futtatása, valamint az összefoglaló kiírása

                _, cross_entropy = sess.run([train_step, cross_entropy_total])
                if step % self.model_config.SUMMARY_EVERY == 0:
                    summary_str = sess.run(summary_op)
                    summary_writer.add_summary(summary_str, step)
                    #validation
                    _, cross_entropy = sess.run([validation_step, cross_entropy_total])
                    v_summary_str = sess.run(summary_op)
                    v_summary_writer.add_summary(v_summary_str, step)                        

Szóval tudna valaki segíteni, hogyan kerülhetem el, hogy a cross_entropy_total kétszer számoljon? Például ha a veszteség az ellenőrzés elvégzése nélkül 100, ha bedugom a fent látható érvényesítési darabokat, akkor 200 lesz


  • Válaszoltam a kérdésedre? 03.06.2017
  • Azon tűnődöm, hogy miért kell hozzáadni az érvényesítési veszteséget a cross_entropy_loss gyűjteményhez, majd frissíteni a súlyokat ezzel. Ha a lépés az érvényesítésről szól, a veszteséget nem szabad kihagyni, hogy hozzáadjuk a csak edzési veszteségeket tartalmazó gyűjteményhez. 01.12.2017

Válaszok:


1

Általában az emberek az feed_dict argumentummal betáplálják a képzési és érvényesítési adatokat a sess.run-ba. Így a "grafikon" nem függ az adatkészlet résztől.

Az sem világos számomra, hogy miért kell itt egyáltalán "gyűjteményeket" használni. A cross_entropy_sum = tf.reduce_sum ...-t minimize-re továbbíthatja.

19.05.2017
  • @wrecktangle tensorflow.org/get_started/mnist/beginners (Crtl-F feed_dict) 20.05.2017
  • Emellett szeretném minimalizálni a cross_entropy_total értéket, amely a cross_entropy_sum több GPU-n keresztül, tehát hogyan tudom ezt megtenni gyűjtemények nélkül? 21.05.2017
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..