Keras, Tensorflow: How to set breakpoint (debug) in custom layer when evaluating?

后端 未结 2 1507
情书的邮戳
情书的邮戳 2021-01-05 03:02

I just want to do some numerical validation inside the custom layer.

Suppose we have a very simple custom layer:

class test_layer(keras.layers.Layer         


        
相关标签:
2条回答
  • 2021-01-05 03:23
    1. Yes. The call() method is only used to build the computational graph.

    2. As to the debug. I prefer using TFDBG, which is a recommended debugging tool for tensorflow, although it doesn't provide break point functions.

    For Keras, you can add these line to your script to use TFDBG

    import tf.keras.backend as K
    from tensorflow.python import debug as tf_debug
    sess = K.get_session()
    sess = tf_debug.LocalCLIDebugWrapperSession(sess)
    K.set_session(sess)
    
    0 讨论(0)
  • 2021-01-05 03:36

    In TensorFlow 2, you can now add breakpoints to the TensorFlow Keras models/layers, including when using the fit, evaluate, and predict methods. However, you must add model.run_eagerly = True after calling model.compile() for the values of the tensor to be available in the debugger at the breakpoint. For example,

    import tensorflow as tf
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.losses import BinaryCrossentropy
    from tensorflow.keras.models import Model
    from tensorflow.keras.optimizers import Adam
    
    
    class SimpleModel(Model):
    
        def __init__(self):
            super().__init__()
            self.dense0 = Dense(2)
            self.dense1 = Dense(1)
    
        def call(self, inputs):
            z = self.dense0(inputs)
            z = self.dense1(z)  # Breakpoint in IDE here. =====
            return z
    
    x = tf.convert_to_tensor([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
    
    model0 = SimpleModel()
    y0 = model0.call(x)  # Values of z shown at breakpoint. =====
    
    model1 = SimpleModel()
    model1.run_eagerly = True
    model1.compile(optimizer=Adam(), loss=BinaryCrossentropy())
    y1 = model1.predict(x)  # Values of z *not* shown at breakpoint. =====
    
    model2 = SimpleModel()
    model2.compile(optimizer=Adam(), loss=BinaryCrossentropy())
    model2.run_eagerly = True
    y2 = model2.predict(x)  # Values of z shown at breakpoint. =====
    

    Note: this was tested in TensorFlow 2.0.0-rc0.

    0 讨论(0)
提交回复
热议问题