hkayabilisim commited on
Commit
eaedbc1
·
1 Parent(s): fadaa8f

feature: add new net model with one hidden layer

Browse files

A new sequential neural network model is added
with a single hidden layer. Linear activations are used.

agent/backend/models.py CHANGED
@@ -11,7 +11,22 @@ class Perceptron(nn.Module):
11
  def forward(self, x: torch.Tensor) -> torch.Tensor:
12
  out = self.layer(x)
13
  return out
14
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  class PolicyGradientNetwork(nn.Module):
17
  def __init__(self, num_inputs, num_actions, hidden_size):
 
11
  def forward(self, x: torch.Tensor) -> torch.Tensor:
12
  out = self.layer(x)
13
  return out
14
+
15
+
16
+ class NetSingleHiddenLayer(nn.Module):
17
+ def __init__(self, in_features: int, out_features: int, hidden_size):
18
+ super().__init__()
19
+ self.in_features = in_features
20
+ self.out_features = out_features
21
+ self.hidden_size = hidden_size
22
+ self.layer1 = nn.Sequential(nn.Linear(in_features=self.in_features,out_features=self.hidden_size))
23
+ self.layer2 = nn.Sequential(nn.Linear(in_features=self.hidden_size,out_features=self.out_features))
24
+
25
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
26
+ out = self.layer1(x)
27
+ out = self.layer2(out)
28
+ return out
29
+
30
 
31
  class PolicyGradientNetwork(nn.Module):
32
  def __init__(self, num_inputs, num_actions, hidden_size):
agent/backend/utils.py CHANGED
@@ -8,7 +8,7 @@ import itertools
8
  import solara
9
 
10
  from .data import ExplorationDataset
11
- from .models import Perceptron
12
  from .loss import loss_mape
13
 
14
  def predict_dict(model, ds, inputs: Dict[str, Union[List[int], List[float]]]):
@@ -67,6 +67,10 @@ def train(ds: ExplorationDataset, model_name, trn_ratio,
67
  df = ds.df
68
  if model_name == "Perceptron":
69
  model = Perceptron(in_features=len(input_cols), out_features=len(output_cols))
 
 
 
 
70
  if loss_name == "mape":
71
  loss_fn = loss_mape
72
 
 
8
  import solara
9
 
10
  from .data import ExplorationDataset
11
+ from .models import Perceptron, NetSingleHiddenLayer
12
  from .loss import loss_mape
13
 
14
  def predict_dict(model, ds, inputs: Dict[str, Union[List[int], List[float]]]):
 
67
  df = ds.df
68
  if model_name == "Perceptron":
69
  model = Perceptron(in_features=len(input_cols), out_features=len(output_cols))
70
+ elif model_name == "NetSingleHiddenLayer":
71
+ # TODO: make hidden_size adjustable in ui
72
+ model = NetSingleHiddenLayer(in_features=len(input_cols), out_features=len(output_cols), hidden_size=10)
73
+
74
  if loss_name == "mape":
75
  loss_fn = loss_mape
76
 
agent/dashboard/training.py CHANGED
@@ -83,13 +83,14 @@ def ExecutePanel(df):
83
  max_epoch = local_state.value['max_epoch'].value
84
  loss_name = local_state.value['loss_name'].value
85
  seed = local_state.value['seed'].value
 
86
 
87
  epoch_list = []
88
  trn_loss_list = []
89
  val_loss_list = []
90
  ds = ExplorationDataset(dff, input_cols, output_cols)
91
  local_state.value['ds'].set(ds)
92
- for epoch, trn_loss, val_loss, model in train(ds, "Perceptron", trn_ratio,
93
  batch_size_trn, batch_size_val, optimizer_name, learning_rate,
94
  max_epoch, loss_name, seed):
95
  epoch_list.append(epoch)
@@ -125,7 +126,7 @@ def ParameterSelection(df):
125
  value=local_state.value['optimizer_name'].value,
126
  on_value=local_state.value['optimizer_name'].set)
127
 
128
- solara.Select(label="Model", values=["Perceptron"],
129
  value=local_state.value['model_name'].value,
130
  on_value=local_state.value['model_name'].set)
131
 
 
83
  max_epoch = local_state.value['max_epoch'].value
84
  loss_name = local_state.value['loss_name'].value
85
  seed = local_state.value['seed'].value
86
+ model_name = local_state.value['model_name'].value
87
 
88
  epoch_list = []
89
  trn_loss_list = []
90
  val_loss_list = []
91
  ds = ExplorationDataset(dff, input_cols, output_cols)
92
  local_state.value['ds'].set(ds)
93
+ for epoch, trn_loss, val_loss, model in train(ds, model_name, trn_ratio,
94
  batch_size_trn, batch_size_val, optimizer_name, learning_rate,
95
  max_epoch, loss_name, seed):
96
  epoch_list.append(epoch)
 
126
  value=local_state.value['optimizer_name'].value,
127
  on_value=local_state.value['optimizer_name'].set)
128
 
129
+ solara.Select(label="Model", values=["Perceptron","NetSingleHiddenLayer"],
130
  value=local_state.value['model_name'].value,
131
  on_value=local_state.value['model_name'].set)
132