anchor.diff:  
   -spec train(binary(), pos_integer(), pos_integer()) -> ok | {error, binary()}.
   train(NetworkId, Epochs, BatchSize) ->
  -    gen_server:call(?NETWORK_GID(NetworkId), {train, [Epochs, BatchSize]}).
  +    gen_server:call(?NETWORK_GID(NetworkId), {train, [Epochs, BatchSize]}, ?TIMEOUT).
   
   -spec get_weights(binary()) -> ok | {error, binary()}.
   get_weights(NetworkId) ->
  -    gen_server:call(?NETWORK_GID(NetworkId), {get_weights, []}).
  +    gen_server:call(?NETWORK_GID(NetworkId), {get_weights, []}, ?TIMEOUT).
   
   -spec set_weights(binary(), [float()]) -> ok | {error, binary()}.
   set_weights(NetworkId, Weights) ->
  -    gen_server:call(?NETWORK_GID(NetworkId), {set_weights, [Weights]}).
  +    gen_server:call(?NETWORK_GID(NetworkId), {set_weights, [Weights]}, ?TIMEOUT).
   
   -spec predict(binary(), [number()]) -> list() | {error, binary()} .
   predict(NetworkId, [N|_]=Input) when is_number(N) ->
  
positive.code: -define(BATCH_SIZE, 512).
  -define(EPOCHS, 1).
  -define(SCALE, null).
  
  -spec start_link(binary(), inet:socket_address() | inet:hostname(), inet:port_number()) -> {ok, pid()} | {error, term()}.
  start_link(NetworkId, Address, Port) ->
  
negative.code:     [Result] = predict(NetworkId, [Input]),
      Result;
  predict(NetworkId, Set) ->
      gen_server:call(?NETWORK_GID(NetworkId), {predict, [Set]}, ?TIMEOUT).
  
  %% Gen server related functions
  
  