def _build_network(self): self.X = Parameter(is_placeholder=True, name="X") self.Y = Parameter(is_placeholder=True, name="Y") prev_inp = self.X prev_shape = self.inp_shape for idx, num_units in enumerate(self.hidden_layers): W = Parameter(np.random.random((prev_shape, num_units)), requires_grad=True, name="W" + str(idx + 1)) B = Parameter(np.zeros((num_units, )), requires_grad=True, name="B" + str(idx + 1)) if idx == len(self.hidden_layers) - 1: out = Node.Add(Node.Mul(prev_inp, W), B) out = Node.SoftmaxCrossEnt(out, self.Y) else: out = Node.ReLU(Node.Add(Node.Mul(prev_inp, W), B)) prev_inp = out prev_shape = num_units self.loss = out