Before, we were dealing with only one output node which made the code straightforward. However now that we have multiple input units and multiple hidden units, the weights between them will require two indices: w_{ij} where i denotes input units and j are the hidden units.
For example, the following image shows our network, with its input units labeled x_1, x_2 and x_3, and its hidden nodes labeled h_1 and h_2h:
Code
import numpy as npdefsigmoid(x):""" Calculate sigmoid """return1/(1+np.exp(-x))# Network sizeN_input =4N_hidden =3N_output =2np.random.seed(42)# Make some fake dataX = np.random.randn(4)weights_input_to_hidden = np.random.normal(0, scale=0.1, size=(N_input, N_hidden))weights_hidden_to_output = np.random.normal(0, scale=0.1, size=(N_hidden, N_output))# TODO: Make a forward pass through the networkhidden_layer_in = np.dot(X , weights_input_to_hidden)hidden_layer_out =sigmoid(hidden_layer_in)print('Hidden-layer Output:')print(hidden_layer_out)output_layer_in = np.dot(hidden_layer_out, weights_hidden_to_output)output_layer_out =sigmoid(output_layer_in)print('Output-layer Output:')print(output_layer_out)