defmodule ExNeuralNetwork do @moduledoc """ Documentation for `NeuralNetwork`. """ defmacro __using__(_) do quote do alias ExNeuralNetwork.Impl alias ExNeuralNetwork.Server @server ExNeuralNetwork.Server @spec start_link(Integer.t(), [Integer.t()], Integer.t(), Float.t()) :: {:ok, any} | {:error, any} def start_link(input_nodes, hidden_layers, output_nodes, learning_rate) do network = Impl.get_initial_network(input_nodes, hidden_layers, output_nodes) state = Server.get_inital_state(network, learning_rate) GenServer.start_link(@server, state, name: __MODULE__) end def query(input) do GenServer.call(__MODULE__, {:query, input}) end def train(input, target) do GenServer.call(__MODULE__, {:train, input, target}) end def get_network() do GenServer.call(__MODULE__, :get_network) end def set_network(network) do GenServer.cast(__MODULE__, {:set_network, network}) end end end end