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

Egyéni mérőszámok a Keras képszegmentálásához

Megpróbálom kinyomtatni és naplózni az egyéni mérőszámokat (kocka pontszámot) minden osztálynál az edzés során beállított érvényesítéshez. Azt szeretném, ha a Keras egyéni mérőszámokat számítana ki az érvényesítési halmazokra minden korszak után. A jelenlegi programom működik, de be kell használnom néhány trükköt, amelyek végül memóriaproblémákat okoznak az edzés során.

A probléma az összes osztály kocka pontszámának kinyomtatása és naplózása, a számítások tenzorokon történnek, amelyeket nem tudok kinyomtatni. A TensorFlow 2.0-val kapcsolatos kompatibilitási problémák miatt nem tudom használni a lelkes módot, és újabb munkamenet inicializálására kényszerültem.

Az egyéni metrika osztályom az alábbiakban látható:

class Metrics(tf.keras.callbacks.Callback):

    def on_train_begin(self, logs={}):
        self.val_lv = []
        self.val_rk = []
        self.val_lk = []
        self.val_sp = []

    def on_epoch_end(self, batch, logs={}):

        layer_name = 'loss6'
        self.intermediate_layer_model = tf.keras.models.Model(inputs=self.model.input,
                                                              outputs=self.model.get_layer(layer_name).output)
        for batch_index in range(0, len(self.validation_data)):
            temp_targ = self.validation_data[batch_index][1][0]

            temp_targ=temp_targ.astype('float32')

            temp_predict = (np.asarray( self.intermediate_layer_model.predict(
                self.validation_data[batch_index][0]))).round()

            val_lvs = tf.reduce_mean((dice_coef(temp_targ[:,1, :, :], temp_predict[:,1, :, :])))
            val_rks = tf.reduce_mean(dice_coef(temp_targ[:, 2, :, :], temp_predict[:, 2, :, :]))
            val_lks = tf.reduce_mean(dice_coef(temp_targ[:, 3, :, :], temp_predict[:, 3, :, :]))
            val_sps = tf.reduce_mean(dice_coef(temp_targ[:, 4, :, :], temp_predict[:, 4, :, :]))


            self.val_lv.append(val_lvs)
            self.val_rk.append(val_rks)
            self.val_lk.append(val_lks)
            self.val_sp.append(val_sps)
        sess = tf.Session()
        print('liver-score:', sess.run(tf.reduce_mean(self.val_lv)))
        print('rk-score:', sess.run(tf.reduce_mean(self.val_rk)))
        print('lk-score:', sess.run(tf.reduce_mean(self.val_lk)))
        print('sp-score:', sess.run(tf.reduce_mean(self.val_sp)))

        logs['liver-score'] = sess.run(tf.reduce_mean(self.val_lv))
        logs['rk-score'] = sess.run(tf.reduce_mean(self.val_rk))
        logs['lk-score'] = sess.run(tf.reduce_mean(self.val_lk))
        logs['sp-score'] = sess.run(tf.reduce_mean(self.val_sp))
        sess.close()

        return

Vegye figyelembe, hogy a lv, rk, lk és sp változók az osztálynevem rövidítései.

Van más módszer a mutatók nyomtatására és naplózására, kivéve a munkamenetet?

02.06.2020

Válaszok:


1

Amennyire én értem, a temp_predict és a temp_predict numpy tömbök. Tehát az egyetlen módja annak, hogy a tenzorokat az az, hogy a tf.reduce_mean értéket használja. Cserélheti a következővel: np.mean. Ez csak akkor működik, ha a dice_coef-nek nincs tensorflow művelete. Ha ez megtörténik, akkor le kell cserélnie őket zsibbadt funkciókra. Ha ezt megtette, akkor nem kell új munkameneteket nyitnia.

Ahelyett, hogy minden korszak végén új modellt hozna létre (intermediate_layer_model), létrehozhat egy keras-függvényt a tf.keras.backend.function erről itt olvashat bővebben.

02.06.2020
Ú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..