chainer.functions.forget¶
-
chainer.functions.forget(func, *xs)[source]¶ Calls a function without storing intermediate results.
On a forward propagation, Chainer normally stores all intermediate results of
VariableNodes on a computational graph as they are required on backward propagation. Sometimes these results consume too much memory.F.forgetforgets such intermediate results on forward propagation, and still supports backpropagation with recalculation.On a forward propagation,
F.forgetcalls a given function with given variables without creating a computational graph. That means, no intermediate results are stored. On a backward propagation,F.forgetcalls the given function again to create a computational graph for backpropagation.F.forgetreduces internal memory usage, whereas it requires more calculation time as it calls the function twice.Example
Let
fbe a function defined as:>>> def f(a, b): ... return (a + b) * a
and,
xandybeVariables:>>> x = chainer.Variable(np.random.uniform(-1, 1, 5).astype(np.float32)) >>> y = chainer.Variable(np.random.uniform(-1, 1, 5).astype(np.float32))
When
zis calculated asz = f(x, y), its intermediate resultx + yis stored in memory. Instead, if you callfwithF.forget:>>> z = F.forget(f, x, y)
intermediate
x + yis forgotten.Note
F.forgetdoes not support functions which behave differently in multiple calls with the same inputs, such asF.dropout()andF.negative_sampling().Note
In case input argument variables are of class
numpy.ndarrayorcupy.ndarrayobjects, arguments will automatically be converted toVariables. This conversion takes place to ensure that this function is included in the computational graph to enable backward computations.Note
F.forgetdoes not support double backpropagation.Note
If you want to use
F.forgetto a link which updates the link’s internal information every time the forward computation is called, please ensure that the information is updated just once in a single iteration. You may use thechainer.config.in_recomputingflag to check if the forward computation is the first call in an iteration. Please see the implementation ofBatchNormalizationfor detail.- Parameters
- Returns
A variable
funcreturns. If it returns a tuple, the method returns a tuple too.- Return type