Skip to content

Commit 2782b45

Browse files
v0.1.1
1 parent 663ed6b commit 2782b45

8 files changed

Lines changed: 1133 additions & 1174 deletions

File tree

notebooks/14_spot_ray_hpt_torch_cifar10.ipynb

Lines changed: 1044 additions & 1157 deletions
Large diffs are not rendered by default.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
77

88
[project]
99
name = "spotPython"
10-
version = "0.1.0"
10+
version = "0.1.1"
1111
authors = [
1212
{ name="T. Bartz-Beielstein", email="tbb@bartzundbartz.de" }
1313
]

src/spotPython/data/torch_hyper_dict.json

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,23 @@
4343
"transform": "None",
4444
"lower": 2,
4545
"upper": 10
46-
}
46+
},
47+
"optimizer": {
48+
"levels": ["Adadelta", "Adagrad", "Adam", "AdamW", "SparseAdam", "Adamax", "ASGD", "LBFGS", "NAdam", "RAdam", "RMSprop", "Rprop", "SGD"],
49+
"type": "factor",
50+
"default": "SGD",
51+
"transform": "None",
52+
"core_model_parameter_type": "str",
53+
"lower": 0,
54+
"upper": 12},
55+
"criterion": {
56+
"levels": ["L1Loss", "MSELoss", "CrossEntropyLoss", "CTCLoss", "NLLLoss", "PoissonNLLLoss", "GaussianNLLLoss", "KLDivLoss", "BCELoss", "BCEWithLogitsLoss", "MarginRankingLoss", "HingeEmbeddingLoss", "MultiLabelMarginLoss", "HuberLoss", "SmoothL1Loss", "SoftMarginLoss", "MultiLabelSoftMarginLoss", "CosineEmbeddingLoss", "MultiMarginLoss", "TripletMarginLoss", "TripletMarginWithDistanceLoss"],
57+
"type": "factor",
58+
"default": "CrossEntropyLoss",
59+
"transform": "None",
60+
"core_model_parameter_type": "str",
61+
"lower": 0,
62+
"upper": 20}
4763
},
4864
"Net_CIFAR10":
4965
{
@@ -89,7 +105,25 @@
89105
"transform": "None",
90106
"lower": 2,
91107
"upper": 10
92-
}
108+
},
109+
"optimizer": {
110+
"levels": ["Adadelta", "Adagrad", "Adam", "AdamW", "SparseAdam", "Adamax", "ASGD", "LBFGS", "NAdam", "RAdam", "RMSprop", "Rprop", "SGD"],
111+
"type": "factor",
112+
"default": "SGD",
113+
"transform": "None",
114+
"class_name": "torch.optim",
115+
"core_model_parameter_type": "instance",
116+
"lower": 0,
117+
"upper": 12},
118+
"criterion": {
119+
"levels": ["L1Loss", "MSELoss", "CrossEntropyLoss", "CTCLoss", "NLLLoss", "PoissonNLLLoss", "GaussianNLLLoss", "KLDivLoss", "BCELoss", "BCEWithLogitsLoss", "MarginRankingLoss", "HingeEmbeddingLoss", "MultiLabelMarginLoss", "HuberLoss", "SmoothL1Loss", "SoftMarginLoss", "MultiLabelSoftMarginLoss", "CosineEmbeddingLoss", "MultiMarginLoss", "TripletMarginLoss", "TripletMarginWithDistanceLoss"],
120+
"type": "factor",
121+
"default": "CrossEntropyLoss",
122+
"transform": "None",
123+
"class_name": "torch.nn",
124+
"core_model_parameter_type": "instance()",
125+
"lower": 0,
126+
"upper": 20}
93127
},
94128
"Template":
95129
{

src/spotPython/torch/netcifar10.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44

55

66
class Net_CIFAR10(netcore.Net_Core):
7-
def __init__(self, l1, l2, lr, batch_size, epochs, k_folds, patience):
7+
def __init__(self, l1, l2, lr, batch_size, epochs, k_folds, patience, criterion, optimizer):
88
super(Net_CIFAR10, self).__init__(
9-
lr=lr, batch_size=batch_size, epochs=epochs, k_folds=k_folds, patience=patience
9+
lr=lr,
10+
batch_size=batch_size,
11+
epochs=epochs,
12+
k_folds=k_folds,
13+
patience=patience,
14+
criterion=criterion,
15+
optimizer=optimizer,
1016
)
1117
self.conv1 = nn.Conv2d(3, 6, 5)
1218
self.pool = nn.MaxPool2d(2, 2)

src/spotPython/torch/netcore.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33

44
class Net_Core(nn.Module):
5-
def __init__(self, lr, batch_size, epochs, k_folds, patience):
5+
def __init__(self, lr, batch_size, epochs, k_folds, patience, criterion, optimizer):
66
super(Net_Core, self).__init__()
77
self.lr = lr
88
self.batch_size = batch_size
99
self.epochs = epochs
1010
self.k_folds = k_folds
1111
self.patience = patience
12+
self.criterion = criterion
13+
self.optimizer = optimizer

src/spotPython/torch/netfashionMNIST.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33

44

55
class Net_fashionMNIST(netcore.Net_Core):
6-
def __init__(self, l1, l2, lr, batch_size, epochs, k_folds, patience):
6+
def __init__(self, l1, l2, lr, batch_size, epochs, k_folds, patience, criterion, optimizer):
77
super(Net_fashionMNIST, self).__init__(
8-
lr=lr, batch_size=batch_size, epochs=epochs, k_folds=k_folds, patience=patience
8+
lr=lr,
9+
batch_size=batch_size,
10+
epochs=epochs,
11+
k_folds=k_folds,
12+
patience=patience,
13+
criterion=criterion,
14+
optimizer=optimizer,
915
)
1016
self.flatten = nn.Flatten()
1117
self.linear_relu_stack = nn.Sequential(

src/spotPython/torch/traintest.py

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import numpy as np
22
from sklearn.model_selection import KFold
33
import torch
4-
from torch import nn
5-
import torch.optim as optim
4+
from torch import nn as nn
65
from spotPython.utils.device import getDevice
76
from torch.utils.data import random_split
87
from spotPython.utils.classes import get_additional_attributes
@@ -77,6 +76,8 @@ def evaluate_cv(
7776
epochs = net.epochs
7877
batch_size = net.batch_size
7978
k_folds = net.k_folds
79+
criterion_instance = net.criterion
80+
optimizer_instance = net.optimizer
8081
removed_attributes = get_additional_attributes(net)
8182
net = remove_attributes(net, removed_attributes)
8283
results = {}
@@ -88,8 +89,10 @@ def evaluate_cv(
8889
print("We will use", torch.cuda.device_count(), "GPUs!")
8990
net = nn.DataParallel(net)
9091
net.to(device)
91-
criterion = nn.CrossEntropyLoss()
92-
optimizer = optim.Adam(net.parameters(), lr=lr)
92+
# criterion = nn.CrossEntropyLoss()
93+
# optimizer = optim.Adam(net.parameters(), lr=lr)
94+
optimizer = optimizer_instance(net.parameters(), lr=lr)
95+
criterion = criterion_instance
9396
kfold = KFold(n_splits=k_folds, shuffle=shuffle)
9497
for fold, (train_ids, val_ids) in enumerate(kfold.split(dataset)):
9598
print(f"Fold: {fold + 1}")
@@ -116,6 +119,8 @@ def evaluate_cv(
116119
net.epochs = epochs
117120
net.batch_size = batch_size
118121
net.k_folds = k_folds
122+
net.criterion = criterion_instance
123+
net.optimizer = optimizer_instance
119124
return df_eval, df_preds
120125

121126

@@ -126,6 +131,8 @@ def evaluate_hold_out(
126131
epochs = net.epochs
127132
batch_size = net.batch_size
128133
patience = net.patience
134+
criterion_instance = net.criterion
135+
optimizer_instance = net.optimizer
129136
removed_attributes = get_additional_attributes(net)
130137
net = remove_attributes(net, removed_attributes)
131138
try:
@@ -136,9 +143,11 @@ def evaluate_hold_out(
136143
print("We will use", torch.cuda.device_count(), "GPUs!")
137144
net = nn.DataParallel(net)
138145
net.to(device)
139-
criterion = nn.CrossEntropyLoss()
146+
# criterion = nn.CrossEntropyLoss()
140147
# TODO: optimizer = optim.Adam(net.parameters(), lr=lr)
141-
optimizer = optim.SGD(net.parameters(), lr=lr, momentum=0.9)
148+
# optimizer = optim.SGD(net.parameters(), lr=lr, momentum=0.9)
149+
optimizer = optimizer_instance(net.parameters(), lr=lr)
150+
criterion = criterion_instance
142151
if test_dataset is None:
143152
trainloader, valloader = create_train_val_data_loaders(
144153
dataset=train_dataset, batch_size=batch_size, shuffle=shuffle
@@ -189,6 +198,8 @@ def evaluate_hold_out(
189198
net.epochs = epochs
190199
net.batch_size = batch_size
191200
net.patience = patience
201+
net.criterion = criterion_instance
202+
net.optimizer = optimizer_instance
192203
print(f"Returned to Spot: Validation loss: {df_eval}")
193204
print("----------------------------------------------")
194205
return df_eval, df_preds
@@ -270,6 +281,8 @@ def train_save(net, train_dataset, shuffle, device=None, show_batch_interval=10_
270281
epochs = net.epochs
271282
batch_size = net.batch_size
272283
patience = net.patience
284+
criterion_instance = net.criterion
285+
optimizer_instance = net.optimizer
273286
removed_attributes = get_additional_attributes(net)
274287
net = remove_attributes(net, removed_attributes)
275288
try:
@@ -280,9 +293,11 @@ def train_save(net, train_dataset, shuffle, device=None, show_batch_interval=10_
280293
print("We will use", torch.cuda.device_count(), "GPUs!")
281294
net = nn.DataParallel(net)
282295
net.to(device)
283-
criterion = nn.CrossEntropyLoss()
296+
# criterion = nn.CrossEntropyLoss()
284297
# TODO: optimizer = optim.Adam(net.parameters(), lr=lr)
285-
optimizer = optim.SGD(net.parameters(), lr=lr, momentum=0.9)
298+
# optimizer = optim.SGD(net.parameters(), lr=lr, momentum=0.9)
299+
optimizer = optimizer_instance(net.parameters(), lr=lr)
300+
criterion = criterion_instance
286301
trainloader, valloader = create_train_val_data_loaders(
287302
dataset=train_dataset, batch_size=batch_size, shuffle=shuffle
288303
)
@@ -329,6 +344,8 @@ def train_save(net, train_dataset, shuffle, device=None, show_batch_interval=10_
329344
net.epochs = epochs
330345
net.batch_size = batch_size
331346
net.patience = patience
347+
net.criterion = criterion_instance
348+
net.optimizer = optimizer_instance
332349
print(f"Returned to Spot: Validation loss: {df_eval}")
333350
print("----------------------------------------------")
334351
return df_eval, df_preds
@@ -339,6 +356,8 @@ def test_saved(net, shuffle, test_dataset=None, device=None, show_batch_interval
339356
epochs = net.epochs
340357
batch_size = net.batch_size
341358
patience = net.patience
359+
criterion_instance = net.criterion
360+
optimizer_instance = net.optimizer
342361
removed_attributes = get_additional_attributes(net)
343362
net = remove_attributes(net, removed_attributes)
344363
try:
@@ -349,7 +368,8 @@ def test_saved(net, shuffle, test_dataset=None, device=None, show_batch_interval
349368
print("We will use", torch.cuda.device_count(), "GPUs!")
350369
net = nn.DataParallel(net)
351370
net.to(device)
352-
criterion = nn.CrossEntropyLoss()
371+
# criterion = nn.CrossEntropyLoss()
372+
criterion = criterion_instance
353373
valloader = torch.utils.data.DataLoader(
354374
test_dataset, batch_size=int(batch_size), shuffle=shuffle, num_workers=0
355375
)
@@ -364,6 +384,8 @@ def test_saved(net, shuffle, test_dataset=None, device=None, show_batch_interval
364384
net.epochs = epochs
365385
net.batch_size = batch_size
366386
net.patience = patience
387+
net.criterion = criterion_instance
388+
net.optimizer = optimizer_instance
367389
print(f"Returned to Spot: Validation loss: {df_eval}")
368390
print("----------------------------------------------")
369391
return df_eval, df_preds

src/spotPython/utils/init.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def fun_control_init():
1616
'device': None}
1717
"""
1818
fun_control = {
19+
"criterion": None,
1920
"data": None,
2021
"train": None,
2122
"test": None,
@@ -24,6 +25,7 @@ def fun_control_init():
2425
"shuffle": None,
2526
"eval": None,
2627
"k_folds": None,
28+
"optimizer": None,
2729
"device": None,
2830
"metric_params": {},
2931
"show_batch_interval": 1_000_000,

0 commit comments

Comments
 (0)