Skip to content

Commit b4ddcaa

Browse files
authored
New loss functions, and bugfixes for CI pipeline (#61)
* new examples with cross validation, and no cross validation for nd_to_1d particularly, also updates to original examples * fix arch bug * update julia-setup@v2 * Update Tests.yml * precision bugfix * format
1 parent c97558f commit b4ddcaa

9 files changed

+1296
-62
lines changed

.github/workflows/Tests.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,20 @@ jobs:
1212
strategy:
1313
matrix:
1414
version:
15-
- '1.6' # Long-Term Support release
15+
- 'lts' # Long-Term Support release
1616
- '1' # Latest 1.x release of julia
1717
os:
1818
- ubuntu-latest
1919
- windows-latest
2020
- macOS-latest
21-
arch:
22-
- x64
2321
steps:
2422
- uses: styfle/[email protected]
2523
with:
2624
access_token: ${{ github.token }}
2725
- uses: actions/checkout@v2
28-
- uses: julia-actions/setup-julia@v1
26+
- uses: julia-actions/setup-julia@v2
2927
with:
3028
version: ${{ matrix.version }}
31-
arch: ${{ matrix.arch }}
3229
- run: julia --project -e 'using Pkg; Pkg.update()' #windows in particular sometimes doesnt update packages
3330
- uses: julia-actions/julia-buildpkg@v1
3431
- uses: julia-actions/julia-runtest@v1

examples/Learn_hyperparameters/1d_to_1d_regression_direct.jl

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ function calculate_mean_and_coeffs(
8888
#we want to calc lambda/m * coeffs^2 in the end
8989
pred_mean, features = predictive_mean(rfm, fitted_features, DataContainer(itest))
9090
scaled_coeffs = sqrt(1 / n_features) * get_coeffs(fitted_features)
91-
return pred_mean, scaled_coeffs
91+
chol_fac = get_decomposition(get_feature_factors(fitted_features)).L
92+
complexity = 2 * sum(log(chol_fac[i, i]) for i in 1:size(chol_fac, 1))
93+
complexity = sqrt(complexity)
94+
return pred_mean, scaled_coeffs, complexity
9295

9396
end
9497

@@ -107,15 +110,19 @@ function estimate_mean_and_coeffnorm_covariance(
107110
n_test = size(get_inputs(io_pairs), 2) - n_train
108111
means = zeros(n_test, n_samples)
109112
coeffl2norm = zeros(1, n_samples)
113+
complexity = zeros(1, n_samples)
114+
110115
for i in 1:n_samples
111116
for j in 1:repeats
112-
m, c = calculate_mean_and_coeffs(rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
117+
m, c, cplx = calculate_mean_and_coeffs(rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
113118
means[:, i] += m' / repeats
114119
coeffl2norm[1, i] += sqrt(sum(c .^ 2)) / repeats
120+
complexity[1, i] += cplx / repeats
121+
115122
end
116123
end
117124

118-
Γ = cov(vcat(means, coeffl2norm), dims = 2)
125+
Γ = cov(vcat(means, coeffl2norm, complexity), dims = 2)
119126
return Γ
120127

121128
end
@@ -136,14 +143,16 @@ function calculate_ensemble_mean_and_coeffnorm(
136143

137144
means = zeros(n_test, N_ens)
138145
coeffl2norm = zeros(1, N_ens)
146+
complexity = zeros(1, N_ens)
139147
for (i, l) in zip(collect(1:N_ens), lvec)
140148
for j in collect(1:repeats)
141-
m, c = calculate_mean_and_coeffs(rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
149+
m, c, cplx = calculate_mean_and_coeffs(rng, l, noise_sd, n_features, batch_sizes, io_pairs, feature_type)
142150
means[:, i] += m' / repeats
143151
coeffl2norm[1, i] += sqrt(sum(c .^ 2)) / repeats
152+
complexity[1, i] += cplx / repeats
144153
end
145154
end
146-
return vcat(means, coeffl2norm)
155+
return vcat(means, coeffl2norm, complexity)
147156

148157
end
149158

@@ -185,7 +194,7 @@ batch_sizes = Dict("train" => 100, "test" => 100, "feature" => 100)
185194
n_train = Int(floor(0.8 * n_data))
186195
n_test = n_data - n_train
187196
n_samples = n_test + 1 # > n_test
188-
n_features = 80
197+
n_features = 300
189198
repeats = 1
190199

191200

@@ -214,8 +223,16 @@ for (idx, type) in enumerate(feature_types)
214223
N_ens = 50
215224
N_iter = 20
216225
initial_params = construct_initial_ensemble(rng, priors, N_ens)
217-
data = vcat(y[(n_train + 1):end], 0.0)
218-
ekiobj = [EKP.EnsembleKalmanProcess(initial_params, data, Γ, Inversion())]
226+
data = vcat(y[(n_train + 1):end], 0.0, 0.0)
227+
ekiobj = [
228+
EKP.EnsembleKalmanProcess(
229+
initial_params,
230+
data,
231+
Γ,
232+
Inversion(),
233+
scheduler = DataMisfitController(terminate_at = 1000),
234+
),
235+
]
219236

220237

221238
err = zeros(N_iter)

0 commit comments

Comments
 (0)