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
VariableNode
s on a computational graph as they are required on backward propagation. Sometimes these results consume too much memory.F.forget
forgets such intermediate results on forward propagation, and still supports backpropagation with recalculation.On a forward propagation,
F.forget
calls a given function with given variables without creating a computational graph. That means, no intermediate results are stored. On a backward propagation,F.forget
calls the given function again to create a computational graph for backpropagation.F.forget
reduces internal memory usage, whereas it requires more calculation time as it calls the function twice.Example
Let
f
be a function defined as:>>> def f(a, b): ... return (a + b) * a
and,
x
andy
beVariable
s:>>> 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
z
is calculated asz = f(x, y)
, its intermediate resultx + y
is stored in memory. Instead, if you callf
withF.forget
:>>> z = F.forget(f, x, y)
intermediate
x + y
is forgotten.Note
F.forget
does 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.ndarray
orcupy.ndarray
objects, arguments will automatically be converted toVariable
s. This conversion takes place to ensure that this function is included in the computational graph to enable backward computations.Note
F.forget
does not support double backpropagation.Parameters: Returns: A variable
func
returns. If it returns a tuple, the method returns a tuple too.Return type: