let make_net ins outs hidden transfers =
   let size = ins :: hidden @ [outs] in
   let rec loop size transfers =
      if List.length size -1 != List.length transfers then
         raise (Invalid_argument "Layouts do not match")
      else
         match size with
            n :: m :: size -> (make_layer n m (List.hd transfers)) 
                                      :: (loop (m::size) (List.tl transfers))
         |  _ -> []
   in
   loop size transfers