tests – Tests¶
This is an identity-like op with the side effect of enforcing a conditional breakpoint, inside a theano function, based on a symbolic scalar condition. It automatically detects available debuggers and uses the first available in the following order: pudb, ipdb, or pdb.
name (String) – name of the conditional breakpoint. To be printed when the breakpoint is activated.
WARNING. At least one of the outputs of the op must be used otherwise the op will be removed from the Theano graph due to its outputs being unused
- WARNING. Employing the function inside a theano graph can prevent
Theano from applying certain optimizations to improve performance, reduce memory consumption and/or reduce numerical instability.
Detailed explanation: As of 2014-12-01 the PdbBreakpoint op is not known by any optimization. Setting a PdbBreakpoint op in the middle of a pattern that is usually optimized out will block the optimization.
import theano import theano.tensor as T from theano.tests.breakpoint import PdbBreakpoint input = T.fvector() target = T.fvector() # Mean squared error between input and target mse = (input - target) ** 2 # Conditional breakpoint to be activated if the total MSE is higher # than 100. The breakpoint will monitor the inputs, targets as well # as the individual error values breakpointOp = PdbBreakpoint("MSE too high") condition = T.gt(mse.sum(), 100) mse, monitored_input, monitored_target = breakpointOp(condition, mse, input, target) # Compile the theano function fct = theano.function([input, target], mse) # Use the function print fct([10, 0], [10, 5]) # Will NOT activate the breakpoint print fct([0, 0], [10, 5]) # Will activate the breakpoint