From 9a835f9d6cb5bfc6f3f63dc24225d52c327bb776 Mon Sep 17 00:00:00 2001 From: pat-alt <altmeyerpat@gmail.com> Date: Tue, 18 Apr 2023 15:40:00 +0200 Subject: [PATCH] almost there --- Manifest.toml | 4 +-- notebooks/Manifest.toml | 8 ++--- notebooks/mnist.qmd | 72 +++++++++++++++++++++++++++------------- src/CCE.jl | 3 -- www/cce_mnist.png | Bin 13769 -> 14802 bytes 5 files changed, 55 insertions(+), 32 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 144bf11e..d16a0962 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -780,7 +780,7 @@ uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" version = "1.12.0" [[deps.JointEnergyModels]] -deps = ["Distributions", "Flux", "StatsBase"] +deps = ["ChainRulesCore", "ComputationalResources", "Distributions", "Flux", "MLJFlux", "MLJModelInterface", "PkgTemplates", "ProgressMeter", "Random", "StatsBase", "Tables"] path = "../JointEnergyModels.jl" uuid = "48c56d24-211d-4463-bbc0-7a701b291131" version = "0.1.0" @@ -997,7 +997,7 @@ version = "0.3.2" [[deps.MLJFlux]] deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "ProgressMeter", "Random", "Statistics", "Tables"] -git-tree-sha1 = "2ecdce4dd9214789ee1796103d29eaee7619ebd0" +path = "../MLJFlux.jl" uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" version = "0.2.9" diff --git a/notebooks/Manifest.toml b/notebooks/Manifest.toml index c38fdac5..6dd7ba4c 100644 --- a/notebooks/Manifest.toml +++ b/notebooks/Manifest.toml @@ -180,9 +180,9 @@ version = "0.2.0" [[deps.CUDA_Runtime_jll]] deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "9ac3ffda60eeae5291be20f35ca264eb8e95bbc6" +git-tree-sha1 = "81eed046f28a0cdd0dc1f61d00a49061b7cc9433" uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" -version = "0.5.0+1" +version = "0.5.0+2" [[deps.CUDNN_jll]] deps = ["Artifacts", "CUDA_Runtime_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] @@ -1052,7 +1052,7 @@ uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" version = "1.12.0" [[deps.JointEnergyModels]] -deps = ["ChainRulesCore", "Distributions", "Flux", "StatsBase"] +deps = ["ChainRulesCore", "ComputationalResources", "Distributions", "Flux", "MLJFlux", "MLJModelInterface", "PkgTemplates", "ProgressMeter", "Random", "StatsBase", "Tables"] path = "../../JointEnergyModels.jl" uuid = "48c56d24-211d-4463-bbc0-7a701b291131" version = "0.1.0" @@ -1293,7 +1293,7 @@ version = "0.3.2" [[deps.MLJFlux]] deps = ["CategoricalArrays", "ColorTypes", "ComputationalResources", "Flux", "MLJModelInterface", "Metalhead", "ProgressMeter", "Random", "Statistics", "Tables"] -git-tree-sha1 = "2ecdce4dd9214789ee1796103d29eaee7619ebd0" +path = "../../MLJFlux.jl" uuid = "094fc8d1-fd35-5302-93ea-dabda2abf845" version = "0.2.9" diff --git a/notebooks/mnist.qmd b/notebooks/mnist.qmd index 4b2b2d3d..433e3ba3 100644 --- a/notebooks/mnist.qmd +++ b/notebooks/mnist.qmd @@ -7,50 +7,80 @@ eval(setup_notebooks) ```{julia} # Data: -counterfactual_data = load_mnist() +n_obs = 1000 +counterfactual_data = load_mnist(n_obs) X, y = CounterfactualExplanations.DataPreprocessing.unpack_data(counterfactual_data) X = table(permutedims(X)) labels = counterfactual_data.output_encoder.labels input_dim, n_obs = size(counterfactual_data.X) +n_digits = Int(sqrt(input_dim)) +output_dim = length(unique(labels)) ``` First, let's create a couple of image classifier architectures: ```{julia} +# Model parameters: epochs = 100 -batchsize = Int(round(n_obs/10)) +batch_size = Int(round(n_obs/10)) +n_hidden = 32 +activation = Flux.swish +builder = MLJFlux.MLP(hidden=(n_hidden,), σ=activation) +α = [0.33,1.0,1e-1] # Simple MLP: mlp = NeuralNetworkClassifier( - builder=MLJFlux.MLP(hidden=(32,), σ=relu), + builder=builder, epochs=epochs, - batch_size=batchsize, + batch_size=batch_size, ) -# Deep Ensemble: -mlp_ens = EnsembleModel(model=mlp, n=5) - -# ResNet: -using MLJFlux, Metalhead -builder = MLJFlux.image_builder(ResNet, 18, pretrain=true) -resnet = ImageClassifier( +# Joint Energy Model: +ð’Ÿx = Uniform(-1,1) +ð’Ÿy = Categorical(ones(output_dim) ./ output_dim) +sampler = ConditionalSampler(ð’Ÿx, ð’Ÿy, input_size=(input_dim,), batch_size=batch_size) +jem = JointEnergyClassifier( + sampler; builder=builder, - epochs=epochs, - batch_size=batchsize, + batch_size=batch_size, + finaliser=Flux.softmax, + loss=Flux.Losses.crossentropy, + jem_training_params=(α=α,verbosity=10,), + sampling_steps=20, ) -# ResNet Ensemble: -resnet_ens = EnsembleModel(model=resnet, n=5) +# Deep Ensemble: +mlp_ens = EnsembleModel(model=mlp, n=5) ``` ```{julia} - -conf_model = conformal_model(mlp; method=:adaptive_inductive, coverage=.99) +cov = .9 +conf_model = conformal_model(jem; method=:adaptive_inductive, coverage=cov) mach = machine(conf_model, X, labels) fit!(mach) M = CCE.ConformalModel(mach.model, mach.fitresult) ``` +```{julia} +jem = mach.model.model.jem +n_iter = 5000 +_w = 1500 +plts = [] +neach = 10 +for i in 1:10 + x = jem.sampler(jem.chain, jem.sampling_rule; niter=n_iter, n_samples=neach, y=i) + plts_i = [] + for j in 1:size(x, 2) + xj = x[:,j] + xj = reshape(xj, (n_digits, n_digits)) + plts_i = [plts_i..., Plots.heatmap(rotl90(xj), axis=nothing, cb=false)] + end + plt = Plots.plot(plts_i..., size=(_w,0.10*_w), layout=(1,10)) + plts = [plts..., plt] +end +Plots.plot(plts..., size=(_w,_w), layout=(10,1)) +``` + ```{julia} test_data = load_mnist_test() f1 = CounterfactualExplanations.Models.model_evaluation(M, test_data) @@ -69,7 +99,7 @@ T = 100 # Generate counterfactual using generic generator: generator = GenericGenerator() ce_wachter = generate_counterfactual( - x, target, dt_reduced, M, generator; + x, target, counterfactual_data, M, generator; decision_threshold=γ, max_iter=T, initialization=:identity, ) @@ -81,7 +111,7 @@ generator = CCEGenerator( # opt=CounterfactualExplanations.Generators.JSMADescent(η=0.5), ) ce_conformal = generate_counterfactual( - x, target, dt_reduced, M, generator; + x, target, counterfactual_data, M, generator; decision_threshold=γ, max_iter=T, initialization=:identity, converge_when=:generator_conditions, @@ -115,12 +145,8 @@ display(plt) savefig(plt, joinpath(www_path, "cce_mnist.png")) ``` - - ## Benchmark - - ```{julia} # Benchmark generators: generators = Dict( diff --git a/src/CCE.jl b/src/CCE.jl index 1b678a81..809408f1 100644 --- a/src/CCE.jl +++ b/src/CCE.jl @@ -9,9 +9,6 @@ include("losses.jl") include("generator.jl") include("sampling.jl") -using MLJFlux -MLJFlux.reformat(X, ::Type{<:AbstractMatrix}) = X' - export CCEGenerator, EnergySampler, set_size_penalty, distance_from_energy end \ No newline at end of file diff --git a/www/cce_mnist.png b/www/cce_mnist.png index 1fd6cc5db60fa44b4b1a090e151e4fababaef3fc..8af78f6df7b2364c9d6883f4b5dea1046c1ac173 100644 GIT binary patch literal 14802 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 literal 13769 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 A761SM -- GitLab