QBM Comparison Simulation vs. Annealer¶
In [1]:
Copied!
%load_ext autoreload
%autoreload 2
%load_ext autotime
from pathlib import Path
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.constants import h as h_P
from scipy.constants import k as k_B
from qbm.models import BQRBM
from qbm.utils import (
Discretizer,
compute_kl_divergence,
compute_lr_exp_decay,
get_rng,
)
k_B /= h_P * 1e9
matplotlib.rcParams.update({"font.size": 14})
# Configure directories
project_dir = Path.cwd()
example_dir = project_dir / "example"
models_dir = example_dir / "artifacts"
plots_dir = example_dir / "plots"
for dir_ in [example_dir, models_dir, plots_dir]:
if not dir_.exists():
dir_.mkdir(parents=True)
# Load anneal schedule data
qpu_params = {"region": "na-west-1", "solver": "Advantage_system4.1"}
# The anneal schedules xlsx files can be found here:
# https://docs.dwavequantum.com/en/latest/quantum_research/solver_properties_specific.html
# From the xlsx file, save the processor-annealing-schedule sheet as a csv
csv_name = "09-1263A-A_Advantage_system4_1_annealing_schedule.csv"
df_anneal = pd.read_csv(
project_dir / f"data/anneal_schedules/csv/{csv_name}",
index_col="s",
)
if 0.5 not in df_anneal.index:
df_anneal.loc[0.5] = (df_anneal.loc[0.499] + df_anneal.loc[0.501]) / 2
df_anneal.sort_index(inplace=True)
%load_ext autoreload
%autoreload 2
%load_ext autotime
from pathlib import Path
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.constants import h as h_P
from scipy.constants import k as k_B
from qbm.models import BQRBM
from qbm.utils import (
Discretizer,
compute_kl_divergence,
compute_lr_exp_decay,
get_rng,
)
k_B /= h_P * 1e9
matplotlib.rcParams.update({"font.size": 14})
# Configure directories
project_dir = Path.cwd()
example_dir = project_dir / "example"
models_dir = example_dir / "artifacts"
plots_dir = example_dir / "plots"
for dir_ in [example_dir, models_dir, plots_dir]:
if not dir_.exists():
dir_.mkdir(parents=True)
# Load anneal schedule data
qpu_params = {"region": "na-west-1", "solver": "Advantage_system4.1"}
# The anneal schedules xlsx files can be found here:
# https://docs.dwavequantum.com/en/latest/quantum_research/solver_properties_specific.html
# From the xlsx file, save the processor-annealing-schedule sheet as a csv
csv_name = "09-1263A-A_Advantage_system4_1_annealing_schedule.csv"
df_anneal = pd.read_csv(
project_dir / f"data/anneal_schedules/csv/{csv_name}",
index_col="s",
)
if 0.5 not in df_anneal.index:
df_anneal.loc[0.5] = (df_anneal.loc[0.499] + df_anneal.loc[0.501]) / 2
df_anneal.sort_index(inplace=True)
time: 1.1 s (started: 2022-03-29 12:06:51 +02:00)
Train Data Creation¶
In [2]:
Copied!
seed = 42
n_visible = 8
n_hidden = 4
n_qubits = n_visible + n_hidden
rng = get_rng(seed)
n_samples = 1500
α = 2 / 3
N_1 = rng.normal(-2, 1, int(round(n_samples * α, 0)))
N_2 = rng.normal(3, 1, int(round(n_samples * (1 - α), 0)))
x = np.concatenate((N_1, N_2))
df = pd.DataFrame.from_dict({"x": x})
discretizer = Discretizer(df, n_bits=n_visible)
V_train = discretizer.df_to_bit_array(df)
V_train
seed = 42
n_visible = 8
n_hidden = 4
n_qubits = n_visible + n_hidden
rng = get_rng(seed)
n_samples = 1500
α = 2 / 3
N_1 = rng.normal(-2, 1, int(round(n_samples * α, 0)))
N_2 = rng.normal(3, 1, int(round(n_samples * (1 - α), 0)))
x = np.concatenate((N_1, N_2))
df = pd.DataFrame.from_dict({"x": x})
discretizer = Discretizer(df, n_bits=n_visible)
V_train = discretizer.df_to_bit_array(df)
V_train
Out[2]:
array([[0, 1, 1, ..., 0, 0, 1],
[0, 1, 0, ..., 1, 1, 1],
[0, 1, 0, ..., 1, 0, 1],
...,
[1, 0, 0, ..., 0, 0, 0],
[1, 1, 1, ..., 0, 0, 1],
[1, 1, 0, ..., 1, 1, 1]])
time: 10.3 ms (started: 2022-03-29 12:06:52 +02:00)
In [3]:
Copied!
data = discretizer.undiscretize_df(discretizer.discretize_df(df))
n_bins = 32
fig, ax = plt.subplots(dpi=144, figsize=(10, 6))
_, bins, _ = ax.hist(data, bins=n_bins, density=True, label="Data")
ax.grid(alpha=0.7)
plt.tight_layout()
plt.savefig(plots_dir / "histogram_train.png")
data = discretizer.undiscretize_df(discretizer.discretize_df(df))
n_bins = 32
fig, ax = plt.subplots(dpi=144, figsize=(10, 6))
_, bins, _ = ax.hist(data, bins=n_bins, density=True, label="Data")
ax.grid(alpha=0.7)
plt.tight_layout()
plt.savefig(plots_dir / "histogram_train.png")
time: 231 ms (started: 2022-03-29 12:06:52 +02:00)
In [4]:
Copied!
def callback(model, sample_state_vectors):
V_train = model.V_train
n_visible = V_train.shape[1]
train_states = (
model._eigen_to_binary(V_train) * 2.0 ** np.arange(n_visible - 1, -1, -1)
).sum(axis=1)
sample_states = (
model._eigen_to_binary(sample_state_vectors[:, :n_visible])
* 2.0 ** np.arange(n_visible - 1, -1, -1)
).sum(axis=1)
dkl = compute_kl_divergence(train_states, sample_states, n_bins=32)
return {"value": dkl, "print": f"D_KL = {dkl:.3f}"}
def callback(model, sample_state_vectors):
V_train = model.V_train
n_visible = V_train.shape[1]
train_states = (
model._eigen_to_binary(V_train) * 2.0 ** np.arange(n_visible - 1, -1, -1)
).sum(axis=1)
sample_states = (
model._eigen_to_binary(sample_state_vectors[:, :n_visible])
* 2.0 ** np.arange(n_visible - 1, -1, -1)
).sum(axis=1)
dkl = compute_kl_divergence(train_states, sample_states, n_bins=32)
return {"value": dkl, "print": f"D_KL = {dkl:.3f}"}
time: 581 µs (started: 2022-03-29 12:06:53 +02:00)
Simulation-based Model¶
In [5]:
Copied!
train_model = True
model_path = models_dir / "model_simulation.pkl"
if train_model:
# Model params
s_freeze = 1.0
embedding = None
beta_initial = 1
simulation_params = {"beta": 0.5}
# Training params
n_epochs = 100
n_samples = 10_000
learning_rate = 0.01
learning_rate_beta = 0.1
mini_batch_size = 10
decay_epoch = 50
decay_period = 10
epochs = np.arange(1, n_epochs + 1)
learning_rates = learning_rate * compute_lr_exp_decay(
epochs, decay_epoch=50, period=10
)
learning_rates_beta = learning_rate_beta * compute_lr_exp_decay(
epochs, decay_epoch=50, period=20
)
# Model init
model_simulation = BQRBM(
V_train=V_train,
n_hidden=n_hidden,
A_freeze=df_anneal.loc[s_freeze, "A(s) (GHz)"],
B_freeze=df_anneal.loc[s_freeze, "B(s) (GHz)"],
beta_initial=beta_initial,
simulation_params=simulation_params,
)
# Model train and save
model_simulation.train(
n_epochs=n_epochs,
n_samples=n_samples,
learning_rate=learning_rates,
learning_rate_beta=learning_rates_beta,
mini_batch_size=mini_batch_size,
callback=callback,
)
model_simulation.save(model_path)
else:
model_simulation = BQRBM.load(model_path)
train_model = True
model_path = models_dir / "model_simulation.pkl"
if train_model:
# Model params
s_freeze = 1.0
embedding = None
beta_initial = 1
simulation_params = {"beta": 0.5}
# Training params
n_epochs = 100
n_samples = 10_000
learning_rate = 0.01
learning_rate_beta = 0.1
mini_batch_size = 10
decay_epoch = 50
decay_period = 10
epochs = np.arange(1, n_epochs + 1)
learning_rates = learning_rate * compute_lr_exp_decay(
epochs, decay_epoch=50, period=10
)
learning_rates_beta = learning_rate_beta * compute_lr_exp_decay(
epochs, decay_epoch=50, period=20
)
# Model init
model_simulation = BQRBM(
V_train=V_train,
n_hidden=n_hidden,
A_freeze=df_anneal.loc[s_freeze, "A(s) (GHz)"],
B_freeze=df_anneal.loc[s_freeze, "B(s) (GHz)"],
beta_initial=beta_initial,
simulation_params=simulation_params,
)
# Model train and save
model_simulation.train(
n_epochs=n_epochs,
n_samples=n_samples,
learning_rate=learning_rates,
learning_rate_beta=learning_rates_beta,
mini_batch_size=mini_batch_size,
callback=callback,
)
model_simulation.save(model_path)
else:
model_simulation = BQRBM.load(model_path)
[BQRBM] epoch 1: β = 0.939, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.013722 D_KL = 0.269 [BQRBM] epoch 2: β = 0.848, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.057796 D_KL = 0.176 [BQRBM] epoch 3: β = 0.762, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.021872 D_KL = 0.103 [BQRBM] epoch 4: β = 0.709, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.018841 D_KL = 0.052 [BQRBM] epoch 5: β = 0.671, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.029039 D_KL = 0.056 [BQRBM] epoch 6: β = 0.644, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.022161 D_KL = 0.053 [BQRBM] epoch 7: β = 0.619, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.031665 D_KL = 0.046 [BQRBM] epoch 8: β = 0.602, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.018389 D_KL = 0.042 [BQRBM] epoch 9: β = 0.585, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.022448 D_KL = 0.041 [BQRBM] epoch 10: β = 0.577, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.016117 D_KL = 0.051 [BQRBM] epoch 11: β = 0.561, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.014682 D_KL = 0.032 [BQRBM] epoch 12: β = 0.551, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.045321 D_KL = 0.039 [BQRBM] epoch 13: β = 0.541, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.016691 D_KL = 0.036 [BQRBM] epoch 14: β = 0.530, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.016191 D_KL = 0.030 [BQRBM] epoch 15: β = 0.525, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.020830 D_KL = 0.024 [BQRBM] epoch 16: β = 0.522, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.011880 D_KL = 0.025 [BQRBM] epoch 17: β = 0.520, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.028253 D_KL = 0.026 [BQRBM] epoch 18: β = 0.517, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.052182 D_KL = 0.024 [BQRBM] epoch 19: β = 0.513, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.018593 D_KL = 0.024 [BQRBM] epoch 20: β = 0.516, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.024267 D_KL = 0.029 [BQRBM] epoch 21: β = 0.511, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.094493 D_KL = 0.021 [BQRBM] epoch 22: β = 0.510, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.020511 D_KL = 0.018 [BQRBM] epoch 23: β = 0.506, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.015206 D_KL = 0.024 [BQRBM] epoch 24: β = 0.505, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.019299 D_KL = 0.019 [BQRBM] epoch 25: β = 0.502, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.017332 D_KL = 0.016 [BQRBM] epoch 26: β = 0.500, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.019422 D_KL = 0.021 [BQRBM] epoch 27: β = 0.498, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.022277 D_KL = 0.021 [BQRBM] epoch 28: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.019550 D_KL = 0.017 [BQRBM] epoch 29: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.018721 D_KL = 0.018 [BQRBM] epoch 30: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.024697 D_KL = 0.016 [BQRBM] epoch 31: β = 0.502, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.050626 D_KL = 0.017 [BQRBM] epoch 32: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.023000 D_KL = 0.018 [BQRBM] epoch 33: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.025858 D_KL = 0.020 [BQRBM] epoch 34: β = 0.497, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.024858 D_KL = 0.016 [BQRBM] epoch 35: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.032439 D_KL = 0.018 [BQRBM] epoch 36: β = 0.497, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.025122 D_KL = 0.020 [BQRBM] epoch 37: β = 0.496, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.021540 D_KL = 0.016 [BQRBM] epoch 38: β = 0.495, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.017282 D_KL = 0.013 [BQRBM] epoch 39: β = 0.496, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.021170 D_KL = 0.017 [BQRBM] epoch 40: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.051067 D_KL = 0.015 [BQRBM] epoch 41: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.017868 D_KL = 0.013 [BQRBM] epoch 42: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.016865 D_KL = 0.019 [BQRBM] epoch 43: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.014662 D_KL = 0.011 [BQRBM] epoch 44: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.016259 D_KL = 0.016 [BQRBM] epoch 45: β = 0.500, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.023120 D_KL = 0.012 [BQRBM] epoch 46: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.015960 D_KL = 0.016 [BQRBM] epoch 47: β = 0.501, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.015739 D_KL = 0.012 [BQRBM] epoch 48: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.021606 D_KL = 0.015 [BQRBM] epoch 49: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.014887 D_KL = 0.014 [BQRBM] epoch 50: β = 0.508, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:00:02.047007 D_KL = 0.015 [BQRBM] epoch 51: β = 0.506, learning rate = 9.33e-03, β learning rate = 9.66e-02, epoch duration = 0:00:02.064187 D_KL = 0.009 [BQRBM] epoch 52: β = 0.501, learning rate = 8.71e-03, β learning rate = 9.33e-02, epoch duration = 0:00:02.051784 D_KL = 0.009 [BQRBM] epoch 53: β = 0.498, learning rate = 8.12e-03, β learning rate = 9.01e-02, epoch duration = 0:00:02.022658 D_KL = 0.012 [BQRBM] epoch 54: β = 0.496, learning rate = 7.58e-03, β learning rate = 8.71e-02, epoch duration = 0:00:02.020979 D_KL = 0.012 [BQRBM] epoch 55: β = 0.496, learning rate = 7.07e-03, β learning rate = 8.41e-02, epoch duration = 0:00:02.016154 D_KL = 0.014 [BQRBM] epoch 56: β = 0.497, learning rate = 6.60e-03, β learning rate = 8.12e-02, epoch duration = 0:00:02.018136 D_KL = 0.012 [BQRBM] epoch 57: β = 0.497, learning rate = 6.16e-03, β learning rate = 7.85e-02, epoch duration = 0:00:02.026563 D_KL = 0.009 [BQRBM] epoch 58: β = 0.499, learning rate = 5.74e-03, β learning rate = 7.58e-02, epoch duration = 0:00:02.017382 D_KL = 0.011 [BQRBM] epoch 59: β = 0.497, learning rate = 5.36e-03, β learning rate = 7.32e-02, epoch duration = 0:00:02.053702 D_KL = 0.012 [BQRBM] epoch 60: β = 0.497, learning rate = 5.00e-03, β learning rate = 7.07e-02, epoch duration = 0:00:02.017849 D_KL = 0.012 [BQRBM] epoch 61: β = 0.498, learning rate = 4.67e-03, β learning rate = 6.83e-02, epoch duration = 0:00:02.017494 D_KL = 0.012 [BQRBM] epoch 62: β = 0.500, learning rate = 4.35e-03, β learning rate = 6.60e-02, epoch duration = 0:00:02.019530 D_KL = 0.010 [BQRBM] epoch 63: β = 0.500, learning rate = 4.06e-03, β learning rate = 6.37e-02, epoch duration = 0:00:02.022314 D_KL = 0.011 [BQRBM] epoch 64: β = 0.498, learning rate = 3.79e-03, β learning rate = 6.16e-02, epoch duration = 0:00:02.025714 D_KL = 0.010 [BQRBM] epoch 65: β = 0.497, learning rate = 3.54e-03, β learning rate = 5.95e-02, epoch duration = 0:00:02.023247 D_KL = 0.012 [BQRBM] epoch 66: β = 0.499, learning rate = 3.30e-03, β learning rate = 5.74e-02, epoch duration = 0:00:02.024861 D_KL = 0.008 [BQRBM] epoch 67: β = 0.500, learning rate = 3.08e-03, β learning rate = 5.55e-02, epoch duration = 0:00:02.020144 D_KL = 0.010 [BQRBM] epoch 68: β = 0.502, learning rate = 2.87e-03, β learning rate = 5.36e-02, epoch duration = 0:00:02.023129 D_KL = 0.010 [BQRBM] epoch 69: β = 0.501, learning rate = 2.68e-03, β learning rate = 5.18e-02, epoch duration = 0:00:02.053550 D_KL = 0.013 [BQRBM] epoch 70: β = 0.500, learning rate = 2.50e-03, β learning rate = 5.00e-02, epoch duration = 0:00:02.022104 D_KL = 0.007 [BQRBM] epoch 71: β = 0.500, learning rate = 2.33e-03, β learning rate = 4.83e-02, epoch duration = 0:00:02.021212 D_KL = 0.008 [BQRBM] epoch 72: β = 0.499, learning rate = 2.18e-03, β learning rate = 4.67e-02, epoch duration = 0:00:02.024338 D_KL = 0.010 [BQRBM] epoch 73: β = 0.498, learning rate = 2.03e-03, β learning rate = 4.51e-02, epoch duration = 0:00:02.025899 D_KL = 0.009 [BQRBM] epoch 74: β = 0.498, learning rate = 1.89e-03, β learning rate = 4.35e-02, epoch duration = 0:00:02.023541 D_KL = 0.011 [BQRBM] epoch 75: β = 0.498, learning rate = 1.77e-03, β learning rate = 4.20e-02, epoch duration = 0:00:02.024596 D_KL = 0.010 [BQRBM] epoch 76: β = 0.498, learning rate = 1.65e-03, β learning rate = 4.06e-02, epoch duration = 0:00:02.021185 D_KL = 0.007 [BQRBM] epoch 77: β = 0.498, learning rate = 1.54e-03, β learning rate = 3.92e-02, epoch duration = 0:00:02.023632 D_KL = 0.008 [BQRBM] epoch 78: β = 0.498, learning rate = 1.44e-03, β learning rate = 3.79e-02, epoch duration = 0:00:02.048295 D_KL = 0.008 [BQRBM] epoch 79: β = 0.497, learning rate = 1.34e-03, β learning rate = 3.66e-02, epoch duration = 0:00:02.019859 D_KL = 0.009 [BQRBM] epoch 80: β = 0.497, learning rate = 1.25e-03, β learning rate = 3.54e-02, epoch duration = 0:00:02.021562 D_KL = 0.009 [BQRBM] epoch 81: β = 0.497, learning rate = 1.17e-03, β learning rate = 3.42e-02, epoch duration = 0:00:02.020804 D_KL = 0.008 [BQRBM] epoch 82: β = 0.496, learning rate = 1.09e-03, β learning rate = 3.30e-02, epoch duration = 0:00:02.047260 D_KL = 0.008 [BQRBM] epoch 83: β = 0.497, learning rate = 1.02e-03, β learning rate = 3.19e-02, epoch duration = 0:00:02.039120 D_KL = 0.009 [BQRBM] epoch 84: β = 0.497, learning rate = 9.47e-04, β learning rate = 3.08e-02, epoch duration = 0:00:02.019192 D_KL = 0.007 [BQRBM] epoch 85: β = 0.498, learning rate = 8.84e-04, β learning rate = 2.97e-02, epoch duration = 0:00:02.050638 D_KL = 0.007 [BQRBM] epoch 86: β = 0.497, learning rate = 8.25e-04, β learning rate = 2.87e-02, epoch duration = 0:00:02.049080 D_KL = 0.007 [BQRBM] epoch 87: β = 0.497, learning rate = 7.69e-04, β learning rate = 2.77e-02, epoch duration = 0:00:02.021485 D_KL = 0.010 [BQRBM] epoch 88: β = 0.497, learning rate = 7.18e-04, β learning rate = 2.68e-02, epoch duration = 0:00:02.047871 D_KL = 0.008 [BQRBM] epoch 89: β = 0.497, learning rate = 6.70e-04, β learning rate = 2.59e-02, epoch duration = 0:00:02.019209 D_KL = 0.008 [BQRBM] epoch 90: β = 0.497, learning rate = 6.25e-04, β learning rate = 2.50e-02, epoch duration = 0:00:02.015671 D_KL = 0.007 [BQRBM] epoch 91: β = 0.497, learning rate = 5.83e-04, β learning rate = 2.41e-02, epoch duration = 0:00:02.019394 D_KL = 0.007 [BQRBM] epoch 92: β = 0.497, learning rate = 5.44e-04, β learning rate = 2.33e-02, epoch duration = 0:00:02.026408 D_KL = 0.008 [BQRBM] epoch 93: β = 0.497, learning rate = 5.08e-04, β learning rate = 2.25e-02, epoch duration = 0:00:02.023763 D_KL = 0.009 [BQRBM] epoch 94: β = 0.497, learning rate = 4.74e-04, β learning rate = 2.18e-02, epoch duration = 0:00:02.020650 D_KL = 0.008 [BQRBM] epoch 95: β = 0.497, learning rate = 4.42e-04, β learning rate = 2.10e-02, epoch duration = 0:00:02.043108 D_KL = 0.011 [BQRBM] epoch 96: β = 0.497, learning rate = 4.12e-04, β learning rate = 2.03e-02, epoch duration = 0:00:02.018738 D_KL = 0.007 [BQRBM] epoch 97: β = 0.496, learning rate = 3.85e-04, β learning rate = 1.96e-02, epoch duration = 0:00:02.055366 D_KL = 0.008 [BQRBM] epoch 98: β = 0.497, learning rate = 3.59e-04, β learning rate = 1.89e-02, epoch duration = 0:00:02.017947 D_KL = 0.008 [BQRBM] epoch 99: β = 0.497, learning rate = 3.35e-04, β learning rate = 1.83e-02, epoch duration = 0:00:02.020823 D_KL = 0.007 [BQRBM] epoch 100: β = 0.497, learning rate = 3.13e-04, β learning rate = 1.77e-02, epoch duration = 0:00:02.026146 D_KL = 0.009 time: 3min 22s (started: 2022-03-29 12:06:53 +02:00)
In [6]:
Copied!
dkls = [x["value"] for x in model_simulation.callback_history]
epochs = np.arange(1, len(dkls) + 1)
fig, ax = plt.subplots(1, 2, figsize=(10, 5), dpi=300)
ax[0].plot(epochs, dkls, linewidth=1.8)
ax[0].set_xlabel("Epoch")
ax[0].set_ylabel(r"$D_{KL}(p_{data} \ || \ p_{model})$")
ax[0].set_yticks(np.arange(0, 22.5, 2.5) / 100)
ax[1].set_yticks(np.arange(40, 110, 10))
ax[0].set_ylim((0, 0.2))
ax[1].set_ylim((40, 100))
ax[0].grid(alpha=0.7)
ax[1].plot(
range(len(model_simulation.beta_history)),
1 / k_B / np.array(model_simulation.beta_history) * 1000,
linewidth=1.8,
)
ax[1].set_xlabel("Epoch")
ax[1].set_ylabel(r"$\hat{T}$ [mK]")
ax[1].axhline(
1 / k_B / 0.5 * 1000,
color="k",
linestyle="--",
label=r"$T_{effective}$",
linewidth=1.8,
)
ax[1].grid(alpha=0.7)
ax[1].legend(loc="lower right")
plt.tight_layout()
plt.savefig(plots_dir / "train_results_simulation.png")
dkls = [x["value"] for x in model_simulation.callback_history]
epochs = np.arange(1, len(dkls) + 1)
fig, ax = plt.subplots(1, 2, figsize=(10, 5), dpi=300)
ax[0].plot(epochs, dkls, linewidth=1.8)
ax[0].set_xlabel("Epoch")
ax[0].set_ylabel(r"$D_{KL}(p_{data} \ || \ p_{model})$")
ax[0].set_yticks(np.arange(0, 22.5, 2.5) / 100)
ax[1].set_yticks(np.arange(40, 110, 10))
ax[0].set_ylim((0, 0.2))
ax[1].set_ylim((40, 100))
ax[0].grid(alpha=0.7)
ax[1].plot(
range(len(model_simulation.beta_history)),
1 / k_B / np.array(model_simulation.beta_history) * 1000,
linewidth=1.8,
)
ax[1].set_xlabel("Epoch")
ax[1].set_ylabel(r"$\hat{T}$ [mK]")
ax[1].axhline(
1 / k_B / 0.5 * 1000,
color="k",
linestyle="--",
label=r"$T_{effective}$",
linewidth=1.8,
)
ax[1].grid(alpha=0.7)
ax[1].legend(loc="lower right")
plt.tight_layout()
plt.savefig(plots_dir / "train_results_simulation.png")
time: 785 ms (started: 2022-03-29 01:29:11 +02:00)
Annealer-based Model¶
In [7]:
Copied!
train_model = True
model_path = models_dir / "model_annealer.pkl"
if train_model:
# Model params
s_freeze = 1.0
beta_initial = 0.5
# Set embedding
# minorminer.find_embedding can be used to generate an embedding:
# https://docs.dwavequantum.com/en/latest/ocean/api_ref_system/generated/minorminer.find_embedding.html
embedding = {
0: [4909],
1: [4939],
2: [4879],
3: [4774],
4: [4789],
5: [4924],
6: [4864],
7: [4894],
8: [895],
9: [850],
10: [880],
11: [865],
}
# Set anneal schedule
s_pause = 0.55
t_r = 20
α_quench = 2
t_pause = round(s_pause * t_r, 3)
Δ_quench = round((1 - s_pause) / α_quench, 3)
if s_pause == 1:
anneal_schedule = [(0, 0), (t_pause, s_pause)]
else:
anneal_schedule = [
(0, 0),
(t_pause, s_pause),
(round(t_pause + Δ_quench, 3), 1),
]
# Training params
n_epochs = 100
n_samples = 10_000
learning_rate = 0.01
learning_rate_beta = 0.1
mini_batch_size = 10
epochs = np.arange(1, n_epochs + 1)
learning_rates = learning_rate * compute_lr_exp_decay(
epochs, decay_epoch=50, period=10
)
learning_rates_beta = learning_rate_beta * compute_lr_exp_decay(
epochs, decay_epoch=50, period=20
)
# Set the anneal params
annealer_params = {
"schedule": anneal_schedule,
"embedding": embedding,
"qpu_params": qpu_params,
}
# Skip if model already exists
if model_path.exists():
raise Exception("Model already exists")
# Model init
model_annealer = BQRBM(
V_train=V_train,
n_hidden=n_hidden,
A_freeze=df_anneal.loc[s_freeze, "A(s) (GHz)"],
B_freeze=df_anneal.loc[s_freeze, "B(s) (GHz)"],
beta_initial=beta_initial,
annealer_params=annealer_params,
)
# Model train and save
model_annealer.train(
n_epochs=n_epochs,
n_samples=n_samples,
learning_rate=learning_rates,
learning_rate_beta=learning_rates_beta,
mini_batch_size=mini_batch_size,
callback=callback,
)
model_annealer.save(model_path)
else:
model_annealer = BQRBM.load(model_path)
train_model = True
model_path = models_dir / "model_annealer.pkl"
if train_model:
# Model params
s_freeze = 1.0
beta_initial = 0.5
# Set embedding
# minorminer.find_embedding can be used to generate an embedding:
# https://docs.dwavequantum.com/en/latest/ocean/api_ref_system/generated/minorminer.find_embedding.html
embedding = {
0: [4909],
1: [4939],
2: [4879],
3: [4774],
4: [4789],
5: [4924],
6: [4864],
7: [4894],
8: [895],
9: [850],
10: [880],
11: [865],
}
# Set anneal schedule
s_pause = 0.55
t_r = 20
α_quench = 2
t_pause = round(s_pause * t_r, 3)
Δ_quench = round((1 - s_pause) / α_quench, 3)
if s_pause == 1:
anneal_schedule = [(0, 0), (t_pause, s_pause)]
else:
anneal_schedule = [
(0, 0),
(t_pause, s_pause),
(round(t_pause + Δ_quench, 3), 1),
]
# Training params
n_epochs = 100
n_samples = 10_000
learning_rate = 0.01
learning_rate_beta = 0.1
mini_batch_size = 10
epochs = np.arange(1, n_epochs + 1)
learning_rates = learning_rate * compute_lr_exp_decay(
epochs, decay_epoch=50, period=10
)
learning_rates_beta = learning_rate_beta * compute_lr_exp_decay(
epochs, decay_epoch=50, period=20
)
# Set the anneal params
annealer_params = {
"schedule": anneal_schedule,
"embedding": embedding,
"qpu_params": qpu_params,
}
# Skip if model already exists
if model_path.exists():
raise Exception("Model already exists")
# Model init
model_annealer = BQRBM(
V_train=V_train,
n_hidden=n_hidden,
A_freeze=df_anneal.loc[s_freeze, "A(s) (GHz)"],
B_freeze=df_anneal.loc[s_freeze, "B(s) (GHz)"],
beta_initial=beta_initial,
annealer_params=annealer_params,
)
# Model train and save
model_annealer.train(
n_epochs=n_epochs,
n_samples=n_samples,
learning_rate=learning_rates,
learning_rate_beta=learning_rates_beta,
mini_batch_size=mini_batch_size,
callback=callback,
)
model_annealer.save(model_path)
else:
model_annealer = BQRBM.load(model_path)
[BQRBM] epoch 1: β = 0.484, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:07:08.907931 D_KL = 0.232 [BQRBM] epoch 2: β = 0.474, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:06:48.725121 D_KL = 0.106 [BQRBM] epoch 3: β = 0.486, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:04:01.671331 D_KL = 0.081 [BQRBM] epoch 4: β = 0.486, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:56.923078 D_KL = 0.109 [BQRBM] epoch 5: β = 0.483, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:38.070698 D_KL = 0.059 [BQRBM] epoch 6: β = 0.494, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:44.256469 D_KL = 0.062 [BQRBM] epoch 7: β = 0.485, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:01.542740 D_KL = 0.059 [BQRBM] epoch 8: β = 0.499, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:17.857143 D_KL = 0.105 [BQRBM] epoch 9: β = 0.505, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:45.187334 D_KL = 0.069 [BQRBM] epoch 10: β = 0.502, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:44.753510 D_KL = 0.046 [BQRBM] epoch 11: β = 0.502, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.701216 D_KL = 0.039 [BQRBM] epoch 12: β = 0.497, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:47.841487 D_KL = 0.040 [BQRBM] epoch 13: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:42.250770 D_KL = 0.047 [BQRBM] epoch 14: β = 0.505, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:45.582664 D_KL = 0.060 [BQRBM] epoch 15: β = 0.501, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:41.280884 D_KL = 0.035 [BQRBM] epoch 16: β = 0.506, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.825837 D_KL = 0.050 [BQRBM] epoch 17: β = 0.500, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.196413 D_KL = 0.037 [BQRBM] epoch 18: β = 0.497, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:42.245617 D_KL = 0.041 [BQRBM] epoch 19: β = 0.496, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.378315 D_KL = 0.054 [BQRBM] epoch 20: β = 0.503, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:46.798225 D_KL = 0.039 [BQRBM] epoch 21: β = 0.508, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:45.673851 D_KL = 0.061 [BQRBM] epoch 22: β = 0.521, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:50.319919 D_KL = 0.037 [BQRBM] epoch 23: β = 0.526, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:47.534919 D_KL = 0.051 [BQRBM] epoch 24: β = 0.533, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.582384 D_KL = 0.027 [BQRBM] epoch 25: β = 0.528, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:50.557590 D_KL = 0.047 [BQRBM] epoch 26: β = 0.538, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:42.965456 D_KL = 0.040 [BQRBM] epoch 27: β = 0.534, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.454228 D_KL = 0.047 [BQRBM] epoch 28: β = 0.537, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:42.496459 D_KL = 0.061 [BQRBM] epoch 29: β = 0.534, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:53.357594 D_KL = 0.093 [BQRBM] epoch 30: β = 0.540, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:02.790267 D_KL = 0.037 [BQRBM] epoch 31: β = 0.542, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:02.298378 D_KL = 0.040 [BQRBM] epoch 32: β = 0.540, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:42.451451 D_KL = 0.036 [BQRBM] epoch 33: β = 0.536, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:47.173624 D_KL = 0.039 [BQRBM] epoch 34: β = 0.541, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:40.074136 D_KL = 0.027 [BQRBM] epoch 35: β = 0.547, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:42.367784 D_KL = 0.079 [BQRBM] epoch 36: β = 0.520, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:41.632255 D_KL = 0.052 [BQRBM] epoch 37: β = 0.524, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.822197 D_KL = 0.020 [BQRBM] epoch 38: β = 0.521, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:40.941778 D_KL = 0.022 [BQRBM] epoch 39: β = 0.485, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:04:17.433543 D_KL = 0.024 [BQRBM] epoch 40: β = 0.473, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:06:44.943720 D_KL = 0.019 [BQRBM] epoch 41: β = 0.454, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:07:25.917607 D_KL = 0.029 [BQRBM] epoch 42: β = 0.449, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:06:53.615115 D_KL = 0.037 [BQRBM] epoch 43: β = 0.440, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:07:00.560991 D_KL = 0.021 [BQRBM] epoch 44: β = 0.468, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:07:49.345984 D_KL = 0.049 [BQRBM] epoch 45: β = 0.482, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:03:02.584091 D_KL = 0.029 [BQRBM] epoch 46: β = 0.485, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:49.108712 D_KL = 0.029 [BQRBM] epoch 47: β = 0.490, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:43.011319 D_KL = 0.025 [BQRBM] epoch 48: β = 0.497, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:40.860075 D_KL = 0.029 [BQRBM] epoch 49: β = 0.507, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:40.831445 D_KL = 0.026 [BQRBM] epoch 50: β = 0.502, learning rate = 1.00e-02, β learning rate = 1.00e-01, epoch duration = 0:02:45.643364 D_KL = 0.047 [BQRBM] epoch 51: β = 0.509, learning rate = 9.33e-03, β learning rate = 9.66e-02, epoch duration = 0:02:57.294182 D_KL = 0.026 [BQRBM] epoch 52: β = 0.510, learning rate = 8.71e-03, β learning rate = 9.33e-02, epoch duration = 0:02:44.202837 D_KL = 0.018 [BQRBM] epoch 53: β = 0.510, learning rate = 8.12e-03, β learning rate = 9.01e-02, epoch duration = 0:02:40.833022 D_KL = 0.018 [BQRBM] epoch 54: β = 0.514, learning rate = 7.58e-03, β learning rate = 8.71e-02, epoch duration = 0:02:43.961709 D_KL = 0.039 [BQRBM] epoch 55: β = 0.523, learning rate = 7.07e-03, β learning rate = 8.41e-02, epoch duration = 0:02:41.420784 D_KL = 0.027 [BQRBM] epoch 56: β = 0.523, learning rate = 6.60e-03, β learning rate = 8.12e-02, epoch duration = 0:02:43.910451 D_KL = 0.019 [BQRBM] epoch 57: β = 0.518, learning rate = 6.16e-03, β learning rate = 7.85e-02, epoch duration = 0:02:46.606390 D_KL = 0.024 [BQRBM] epoch 58: β = 0.517, learning rate = 5.74e-03, β learning rate = 7.58e-02, epoch duration = 0:02:40.529208 D_KL = 0.018 [BQRBM] epoch 59: β = 0.512, learning rate = 5.36e-03, β learning rate = 7.32e-02, epoch duration = 0:03:00.093450 D_KL = 0.031 [BQRBM] epoch 60: β = 0.519, learning rate = 5.00e-03, β learning rate = 7.07e-02, epoch duration = 0:02:40.621479 D_KL = 0.029 [BQRBM] epoch 61: β = 0.520, learning rate = 4.67e-03, β learning rate = 6.83e-02, epoch duration = 0:02:44.035333 D_KL = 0.019 [BQRBM] epoch 62: β = 0.520, learning rate = 4.35e-03, β learning rate = 6.60e-02, epoch duration = 0:02:43.550385 D_KL = 0.034 [BQRBM] epoch 63: β = 0.522, learning rate = 4.06e-03, β learning rate = 6.37e-02, epoch duration = 0:03:02.450734 D_KL = 0.039 [BQRBM] epoch 64: β = 0.522, learning rate = 3.79e-03, β learning rate = 6.16e-02, epoch duration = 0:03:03.080556 D_KL = 0.021 [BQRBM] epoch 65: β = 0.521, learning rate = 3.54e-03, β learning rate = 5.95e-02, epoch duration = 0:02:41.218441 D_KL = 0.011 [BQRBM] epoch 66: β = 0.525, learning rate = 3.30e-03, β learning rate = 5.74e-02, epoch duration = 0:02:40.693951 D_KL = 0.033 [BQRBM] epoch 67: β = 0.522, learning rate = 3.08e-03, β learning rate = 5.55e-02, epoch duration = 0:02:42.756640 D_KL = 0.029 [BQRBM] epoch 68: β = 0.522, learning rate = 2.87e-03, β learning rate = 5.36e-02, epoch duration = 0:02:47.121776 D_KL = 0.016 [BQRBM] epoch 69: β = 0.523, learning rate = 2.68e-03, β learning rate = 5.18e-02, epoch duration = 0:02:43.415603 D_KL = 0.011 [BQRBM] epoch 70: β = 0.517, learning rate = 2.50e-03, β learning rate = 5.00e-02, epoch duration = 0:02:47.585034 D_KL = 0.016 [BQRBM] epoch 71: β = 0.520, learning rate = 2.33e-03, β learning rate = 4.83e-02, epoch duration = 0:02:44.162901 D_KL = 0.016 [BQRBM] epoch 72: β = 0.525, learning rate = 2.18e-03, β learning rate = 4.67e-02, epoch duration = 0:02:43.420097 D_KL = 0.026 [BQRBM] epoch 73: β = 0.516, learning rate = 2.03e-03, β learning rate = 4.51e-02, epoch duration = 0:02:44.361308 D_KL = 0.040 [BQRBM] epoch 74: β = 0.510, learning rate = 1.89e-03, β learning rate = 4.35e-02, epoch duration = 0:02:40.677690 D_KL = 0.016 [BQRBM] epoch 75: β = 0.511, learning rate = 1.77e-03, β learning rate = 4.20e-02, epoch duration = 0:02:40.761636 D_KL = 0.027 [BQRBM] epoch 76: β = 0.512, learning rate = 1.65e-03, β learning rate = 4.06e-02, epoch duration = 0:02:43.153207 D_KL = 0.074 [BQRBM] epoch 77: β = 0.510, learning rate = 1.54e-03, β learning rate = 3.92e-02, epoch duration = 0:02:42.981059 D_KL = 0.022 [BQRBM] epoch 78: β = 0.508, learning rate = 1.44e-03, β learning rate = 3.79e-02, epoch duration = 0:02:41.887736 D_KL = 0.010 [BQRBM] epoch 79: β = 0.505, learning rate = 1.34e-03, β learning rate = 3.66e-02, epoch duration = 0:02:46.777951 D_KL = 0.033 [BQRBM] epoch 80: β = 0.509, learning rate = 1.25e-03, β learning rate = 3.54e-02, epoch duration = 0:02:41.565834 D_KL = 0.029 [BQRBM] epoch 81: β = 0.500, learning rate = 1.17e-03, β learning rate = 3.42e-02, epoch duration = 0:03:03.571748 D_KL = 0.018 [BQRBM] epoch 82: β = 0.498, learning rate = 1.09e-03, β learning rate = 3.30e-02, epoch duration = 0:02:45.323058 D_KL = 0.013 [BQRBM] epoch 83: β = 0.503, learning rate = 1.02e-03, β learning rate = 3.19e-02, epoch duration = 0:02:42.121055 D_KL = 0.032 [BQRBM] epoch 84: β = 0.506, learning rate = 9.47e-04, β learning rate = 3.08e-03, epoch duration = 0:02:45.258842 D_KL = 0.011 [BQRBM] epoch 85: β = 0.512, learning rate = 8.84e-04, β learning rate = 2.97e-03, epoch duration = 0:03:06.646914 D_KL = 0.016 [BQRBM] epoch 86: β = 0.516, learning rate = 8.25e-04, β learning rate = 2.87e-03, epoch duration = 0:02:59.898895 D_KL = 0.034 [BQRBM] epoch 87: β = 0.516, learning rate = 7.69e-04, β learning rate = 2.77e-03, epoch duration = 0:02:39.736599 D_KL = 0.014 [BQRBM] epoch 88: β = 0.519, learning rate = 7.18e-04, β learning rate = 2.68e-03, epoch duration = 0:02:44.552166 D_KL = 0.016 [BQRBM] epoch 89: β = 0.521, learning rate = 6.70e-04, β learning rate = 2.59e-03, epoch duration = 0:02:39.321136 D_KL = 0.033 [BQRBM] epoch 90: β = 0.524, learning rate = 6.25e-04, β learning rate = 2.50e-03, epoch duration = 0:02:43.346359 D_KL = 0.033 [BQRBM] epoch 91: β = 0.526, learning rate = 5.83e-04, β learning rate = 2.41e-03, epoch duration = 0:02:40.517694 D_KL = 0.019 [BQRBM] epoch 92: β = 0.529, learning rate = 5.44e-04, β learning rate = 2.33e-03, epoch duration = 0:02:42.414572 D_KL = 0.039 [BQRBM] epoch 93: β = 0.528, learning rate = 5.08e-04, β learning rate = 2.25e-03, epoch duration = 0:02:40.579656 D_KL = 0.023 [BQRBM] epoch 94: β = 0.529, learning rate = 4.74e-04, β learning rate = 2.18e-03, epoch duration = 0:02:44.102085 D_KL = 0.024 [BQRBM] epoch 95: β = 0.528, learning rate = 4.42e-04, β learning rate = 2.10e-03, epoch duration = 0:02:48.271655 D_KL = 0.023 [BQRBM] epoch 96: β = 0.529, learning rate = 4.12e-04, β learning rate = 2.03e-03, epoch duration = 0:02:45.851408 D_KL = 0.034 [BQRBM] epoch 97: β = 0.529, learning rate = 3.85e-04, β learning rate = 1.96e-03, epoch duration = 0:02:42.188319 D_KL = 0.024 [BQRBM] epoch 98: β = 0.531, learning rate = 3.59e-04, β learning rate = 1.89e-03, epoch duration = 0:02:38.901239 D_KL = 0.029 [BQRBM] epoch 99: β = 0.534, learning rate = 3.35e-04, β learning rate = 1.83e-03, epoch duration = 0:02:41.169669 D_KL = 0.026 [BQRBM] epoch 100: β = 0.534, learning rate = 3.13e-04, β learning rate = 1.77e-02, epoch duration = 0:02:39.609383 D_KL = 0.016 time: 5h 14min 27s (started: 2022-03-29 01:29:11 +02:00)
In [8]:
Copied!
fig, ax = plt.subplots(1, 2, figsize=(10, 5), dpi=300)
dkls_simulation = [d["value"] for d in model_simulation.callback_history]
ax[0].set_xlabel("Epoch")
ax[0].set_ylabel(r"$D_{KL}(p_{data} \ || \ p_{model})$")
ax[0].set_yticks(np.arange(0, 22.5, 2.5) / 100)
ax[1].set_yticks(np.arange(80, 110, 2))
ax[0].set_ylim((0, 0.2))
ax[1].set_xlabel("Epoch")
ax[1].set_ylabel(r"$\hat{T}$ [mK]")
dkls_annealer = [d["value"] for d in model_annealer.callback_history]
epochs = np.arange(1, len(dkls_simulation) + 1)
ax[0].plot(
epochs,
dkls_annealer,
label=r"BQRBM Advantage 4.1",
color="tab:blue",
linewidth=2,
)
ax[0].plot(
epochs,
dkls_simulation,
label=r"BQRBM Simulation",
color="k",
linestyle="--",
linewidth=2,
)
ax[1].plot(
range(len(model_annealer.beta_history)),
1 / k_B / np.array(model_annealer.beta_history) * 1000,
color="tab:blue",
linewidth=2,
)
ax[0].grid(alpha=0.7)
ax[1].grid(alpha=0.7)
ax[0].legend()
plt.tight_layout()
plt.savefig(plots_dir / "train_results_comparison.png")
fig, ax = plt.subplots(1, 2, figsize=(10, 5), dpi=300)
dkls_simulation = [d["value"] for d in model_simulation.callback_history]
ax[0].set_xlabel("Epoch")
ax[0].set_ylabel(r"$D_{KL}(p_{data} \ || \ p_{model})$")
ax[0].set_yticks(np.arange(0, 22.5, 2.5) / 100)
ax[1].set_yticks(np.arange(80, 110, 2))
ax[0].set_ylim((0, 0.2))
ax[1].set_xlabel("Epoch")
ax[1].set_ylabel(r"$\hat{T}$ [mK]")
dkls_annealer = [d["value"] for d in model_annealer.callback_history]
epochs = np.arange(1, len(dkls_simulation) + 1)
ax[0].plot(
epochs,
dkls_annealer,
label=r"BQRBM Advantage 4.1",
color="tab:blue",
linewidth=2,
)
ax[0].plot(
epochs,
dkls_simulation,
label=r"BQRBM Simulation",
color="k",
linestyle="--",
linewidth=2,
)
ax[1].plot(
range(len(model_annealer.beta_history)),
1 / k_B / np.array(model_annealer.beta_history) * 1000,
color="tab:blue",
linewidth=2,
)
ax[0].grid(alpha=0.7)
ax[1].grid(alpha=0.7)
ax[0].legend()
plt.tight_layout()
plt.savefig(plots_dir / "train_results_comparison.png")
time: 873 ms (started: 2022-03-29 06:43:39 +02:00)