-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathutils.py
More file actions
82 lines (63 loc) · 2.31 KB
/
utils.py
File metadata and controls
82 lines (63 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import numpy as np
import pandas as pd
import skrf as rf
from torch.utils.data import DataLoader, Dataset, SubsetRandomSampler, random_split
import torch.nn.functional as F
import torch
from torch import nn
import csv
loss_fn = nn.BCELoss()
loss_fn_2 = nn.BCELoss(reduction='none')
loss_fn_3 = nn.CrossEntropyLoss()
def obtain_posterior_from_net_out(D, cost_function_v):
if cost_function_v == 5:
R = (1-D)/D
elif cost_function_v == 3:
R = torch.exp(D) # because linear layer is used
return R
def save_dict_lists_csv(path, dictionary):
with open(path, "w") as outfile:
writer = csv.writer(outfile)
writer.writerow(dictionary.keys())
writer.writerows(zip(*dictionary.values()))
def to_categorical(y, num_classes, t_tensor=False, dtype="uint8"):
if t_tensor:
return F.one_hot(y, num_classes=num_classes)
else:
return np.eye(num_classes, dtype=dtype)[y.astype(int).squeeze()]
def sl_cost_fcn(out_1, out_2, data_tx, num_classes, alpha):
loss_1 = sl_first(out_1.squeeze(), data_tx, num_classes)
loss_2 = sl_sec(out_2.squeeze())
loss = loss_1 + alpha * loss_2
return loss
def sl_first(y_pred, data_tx, num_classes, t_tensor=True):
loss_1 = torch.matmul(y_pred, torch.transpose(data_tx.float(), 0, 1))
loss_1 = torch.diagonal(loss_1, 0)
loss_1 = torch.mean(loss_1)
return loss_1
def sl_sec(y_pred):
eps = 1e-6
log_pred = torch.log(y_pred + eps) - y_pred
sum_log_pred = torch.mean(log_pred, dim=1)
loss = torch.mean(sum_log_pred)
return -loss
def from_numpy_to_dataframe(numpy_dataset):
df = pd.DataFrame(numpy_dataset).reset_index(drop=True)
return df
def from_s4p_to_df(path, filter_frequencies=[]):
ntwk = rf.Network(path)
df = ntwk.to_dataframe('s')
df = df.reset_index()
df = df.rename({'index': 'Frequency'}, axis=1)
transmission_coefficients = True
if filter_frequencies:
df = df[df["Frequency"] > filter_frequencies[0]]
df = df[df["Frequency"] < filter_frequencies[1]]
if transmission_coefficients:
df = df.drop("s 11", axis='columns')
df = df.drop("s 22", axis='columns')
df = df.drop("s 33", axis='columns')
df = df.drop("s 44", axis='columns')
return df
def compute_module(a):
return np.sqrt((a.real)**2 + (a.imag)**2)