w1 (np.ndarray): The weights of the first layer, of shape (d_in, d_h).
b1 (np.ndarray): The bias of the first layer, of shape (1, d_h).
w2 (np.ndarray): The weights of the second layer, of shape (d_h, d_out).
b2 (np.ndarray): The bias of the second layer, of shape (1, d_out).
data_train (np.ndarray): The data, of shape (N, d_in).
labels_train (np.ndarray): The targets, of shape (N, d_out).
learning_rate (float): The learning rate.
num_epoch (int): The number of epochs.
Returns:
(np.ndarray, np.ndarray, np.ndarray, np.ndarray, list[float]): A tuple containing the resulting weights and biases, and the list of accuracy values of each epoch.