MCPcopy
hub / github.com/ddbourgin/numpy-ml / forward

Method forward

numpy_ml/neural_nets/layers/layers.py:1342–1388  ·  view source on GitHub ↗

Compute the layer output on a single minibatch. Parameters ---------- X : :py:class:`ndarray ` of shape `(n_ex, n_in)` Layer input, representing the `n_in`-dimensional features for a minibatch of `n_ex` examples. retain

(self, X, retain_derived=True)

Source from the content-addressed store, hash-verified

1340 self.parameters["running_var"] = np.ones(self.n_in)
1341
1342 def forward(self, X, retain_derived=True):
1343 """
1344 Compute the layer output on a single minibatch.
1345
1346 Parameters
1347 ----------
1348 X : :py:class:`ndarray <numpy.ndarray>` of shape `(n_ex, n_in)`
1349 Layer input, representing the `n_in`-dimensional features for a
1350 minibatch of `n_ex` examples.
1351 retain_derived : bool
1352 Whether to use the current intput to adjust the running mean and
1353 running_var computations. Setting this to True is the same as
1354 freezing the layer for the current input. Default is True.
1355
1356 Returns
1357 -------
1358 Y : :py:class:`ndarray <numpy.ndarray>` of shape `(n_ex, n_in)`
1359 Layer output for each of the `n_ex` examples
1360 """
1361 if not self.is_initialized:
1362 self.n_in = self.n_out = X.shape[1]
1363 self._init_params()
1364
1365 ep = self.hyperparameters["epsilon"]
1366 mm = self.hyperparameters["momentum"]
1367 rm = self.parameters["running_mean"]
1368 rv = self.parameters["running_var"]
1369
1370 scaler = self.parameters["scaler"]
1371 intercept = self.parameters["intercept"]
1372
1373 # if the layer is frozen, use our running mean/std values rather
1374 # than the mean/std values for the new batch
1375 X_mean = self.parameters["running_mean"]
1376 X_var = self.parameters["running_var"]
1377
1378 if self.trainable and retain_derived:
1379 X_mean, X_var = X.mean(axis=0), X.var(axis=0) # , ddof=1)
1380 self.parameters["running_mean"] = mm * rm + (1.0 - mm) * X_mean
1381 self.parameters["running_var"] = mm * rv + (1.0 - mm) * X_var
1382
1383 if retain_derived:
1384 self.X.append(X)
1385
1386 N = (X - X_mean) / np.sqrt(X_var + ep)
1387 y = scaler * N + intercept
1388 return y
1389
1390 def backward(self, dLdy, retain_grads=True):
1391 """

Callers 1

test_BatchNorm1DFunction · 0.95

Calls 1

_init_paramsMethod · 0.95

Tested by 1

test_BatchNorm1DFunction · 0.76