Skip to content

Instantly share code, notes, and snippets.

@wd15
Last active May 23, 2022 20:10
Show Gist options
  • Save wd15/3cfcde2aaf878ba74184a9dee42efeec to your computer and use it in GitHub Desktop.
Save wd15/3cfcde2aaf878ba74184a9dee42efeec to your computer and use it in GitHub Desktop.
misc
dask-worker-space
.local

Active Learning Hacking

Repository for active learning hacks

Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import dask.array as da\n",
"from dask_ml.model_selection import train_test_split\n",
"from sklearn.pipeline import Pipeline\n",
"from dask_ml.decomposition import IncrementalPCA\n",
"from dask_ml.preprocessing import PolynomialFeatures\n",
"from sklearn.linear_model import LinearRegression\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.gaussian_process import GaussianProcessRegressor\n",
"from sklearn.gaussian_process.kernels import RBF\n",
"from sklearn.metrics import mean_squared_error as mse\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"\n",
"from pymks import (\n",
" generate_multiphase,\n",
" plot_microstructures,\n",
" PrimitiveTransformer,\n",
" TwoPointCorrelation,\n",
" GenericTransformer,\n",
" solve_fe\n",
")\n",
"\n",
"from toolz.curried import curry, pipe, valmap, itemmap, iterate\n",
"from modAL.models import ActiveLearner, CommitteeRegressor\n",
"from modAL.disagreement import max_std_sampling\n",
"from modAL.models import BayesianOptimizer\n",
"from modAL.acquisition import max_EI\n",
"import tqdm"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"@curry\n",
"def iterate_times(func, times, value):\n",
" iter_ = iterate(func, value)\n",
" for _ in tqdm.tqdm(range(times)):\n",
" next(iter_)\n",
" return next(iter_)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"@curry\n",
"def update_learner(oracle_func, x_pool, evaluate_func, accuracy_learner):\n",
" accuracies, learner = accuracy_learner\n",
" query_idx, query_instance = learner.query(x_pool)\n",
" query_y = oracle_func(x_pool[query_idx].reshape(1, -1))\n",
" learner.teach(x_pool[query_idx].reshape(1, -1), query_y)\n",
" return accuracies + [evaluate_func(learner)], learner\n",
"\n",
"@curry\n",
"def evaluate_learner(oracle_func, x_pool, evaluate_func, n_query, learner):\n",
" return iterate_times(\n",
" update_learner(oracle_func, x_pool, evaluate_func),\n",
" n_query,\n",
" ([evaluate_func(learner)], learner)\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def steps():\n",
" return (\n",
" (\"reshape\", GenericTransformer(\n",
" lambda x: x.reshape(x.shape[0], x_data.shape[1], x_data.shape[2])\n",
" )),\n",
" (\"discritize\",PrimitiveTransformer(n_state=2, min_=0.0, max_=1.0)),\n",
" (\"correlations\",TwoPointCorrelation(periodic_boundary=True, cutoff=31, correlations=[(0, 1), (1, 1)])),\n",
" ('flatten', GenericTransformer(lambda x: x.reshape(x.shape[0], -1))),\n",
" ('pca', IncrementalPCA(n_components=3, svd_solver='full')),\n",
" ('poly', PolynomialFeatures(degree=3))\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def make_gp_model():\n",
" kernel = 1 * RBF(length_scale=1.0, length_scale_bounds=(1e-1, 1e2))\n",
" regressor = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)\n",
" return Pipeline(steps=steps() + (\n",
" ('regressor', regressor),\n",
" ))\n",
"\n",
"def make_linear_model():\n",
" return Pipeline(steps=steps() + (\n",
" ('regressor', LinearRegression()),\n",
" ))\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"@curry\n",
"def oracle_func(shape, x_data):\n",
" y_stress = solve_fe(x_data.reshape((-1,) + shape),\n",
" elastic_modulus=(1.3, 2.5),\n",
" poissons_ratio=(0.42, 0.35),\n",
" macro_strain=0.001)['stress'][..., 0]\n",
"\n",
" return np.array(da.average(y_stress.reshape(y_stress.shape[0], -1), axis=1))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def plot_parity(y_test, y_predict):\n",
" pred_data = np.array([y_test, y_predict])\n",
" line = np.min(pred_data), np.max(pred_data)\n",
" plt.plot(pred_data[0], pred_data[1], 'o', color='#f46d43', label='Testing Data')\n",
" plt.plot(line, line, '-', linewidth=3, color='#000000')\n",
" plt.title('Goodness of Fit', fontsize=20)\n",
" plt.xlabel('Actual', fontsize=18)\n",
" plt.ylabel('Predicted', fontsize=18)\n",
" plt.legend(loc=2, fontsize=15)\n",
" return plt"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def three_way_split(x_data, props, random_state):\n",
" x_0, x_ = train_test_split(x_data, train_size=props[0], random_state=random_state)\n",
" x_1, x_2 = train_test_split(x_, train_size=props[1] / (1 - props[0]), random_state=random_state)\n",
" return flatten(x_0), flatten(x_1), flatten(x_2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"def flatten(x_data):\n",
" return x_data.reshape(x_data.shape[0], -1)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"@curry\n",
"def evaluate_func(x_test, y_test, learner):\n",
" return mse(y_test, learner.predict(x_test))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Active Learning!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load Data"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"x_data = da.from_zarr(\"data/x_data.zarr\", chunks=(100, -1))\n",
"y_data = np.array(da.from_array(\"data/y_data.npy\", chunks=(100, -1)))"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"()"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_data.shape"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"\n",
"\n",
"x_pool, x_test, x_train = three_way_split(x_data, (0.8, 0.16), 99)\n",
"oracle = oracle_func(grid_shape)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 2880x288 with 10 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_microstructures(*x_data[:10], cmap='gray', colorbar=False);"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(96, 1681)\n",
"(24, 1681)\n",
"(480, 1681)\n",
"(600, 41, 41)\n"
]
}
],
"source": [
"print(x_test.shape)\n",
"print(x_train.shape)\n",
"print(x_pool.shape)\n",
"print(x_data.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generate the necessary oracle data"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 17min 28s, sys: 14.5 s, total: 17min 43s\n",
"Wall time: 1min 41s\n"
]
}
],
"source": [
"%%time\n",
"y_test = oracle(x_test)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 6min 31s, sys: 4.13 s, total: 6min 36s\n",
"Wall time: 38.5 s\n"
]
}
],
"source": [
"%%time\n",
"y_train = oracle(x_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Set up the active learners\n",
"\n",
"One is a GPR using the maximum std and the other is random"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"std_learner = ActiveLearner(\n",
" estimator=make_gp_model(),\n",
" query_strategy=lambda model, x_: pipe(\n",
" model.predict(x_, return_std=True)[1],\n",
" np.argmax,\n",
" lambda i: (i, x_[i])\n",
" ),\n",
" X_training=x_train,\n",
" y_training=y_train\n",
")\n",
"\n",
"random_learner = ActiveLearner(\n",
" estimator=make_gp_model(),\n",
" query_strategy=lambda model, x_: pipe(\n",
" np.random.randint(0, len(x_)),\n",
" lambda i: (i, x_[i])\n",
" ),\n",
" X_training=x_train,\n",
" y_training=y_train\n",
")\n",
"\n",
"ensemble_learner = CommitteeRegressor(\n",
" learner_list=[\n",
" ActiveLearner(\n",
" estimator=make_gp_model(),\n",
" X_training=x_train_,\n",
" y_training=y_train_\n",
" )\n",
" for x_train_, y_train_ in zip(np.array_split(x_train, 5), np.array_split(y_train, 5))\n",
" ],\n",
" query_strategy=max_std_sampling\n",
")\n",
"\n",
"bayes_learner = BayesianOptimizer(\n",
" estimator=make_gp_model(),\n",
" X_training=x_train,\n",
" y_training=y_train,\n",
" query_strategy=max_EI\n",
")\n",
"\n",
"learners = dict(\n",
"# std=std_learner,\n",
"# random=random_learner,\n",
" ensemble=ensemble_learner,\n",
"# bayes=bayes_learner\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run the learners"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"evaluating ensemble\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 30/30 [02:00<00:00, 4.03s/it]\n"
]
}
],
"source": [
"def evaluate_item(item):\n",
" name, learner = item\n",
" print('evaluating', name)\n",
" return name, evaluate_learner(oracle, x_pool, evaluate_func(x_test, y_test), 30, learner)\n",
"\n",
"learner_accuracy = itemmap(evaluate_item, learners)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f049c5d61c0>"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for k, v in learner_accuracy.items():\n",
" plt.semilogy(v[0], label=k)\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The results"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f049c14a700>"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for k, v in learner_accuracy.items():\n",
" plt.semilogy(v[0], label=k)\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Check what the accuracy actually looks like"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"y_pred = learner_accuracy['std'][1].predict(x_test)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<module 'matplotlib.pyplot' from '/nix/store/c8sgkmibi2vyfw75w9vai2917j5smvq7-python3.8-matplotlib-3.3.1/lib/python3.8/site-packages/matplotlib/pyplot.py'>"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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xjKxc0vOq1s16Hkl/fkSjAWrMCfxNcPqIafHrl27qF+/Ph999NExx6KiogC44oorGDt2LM8//zxvvfUWERERXHzxxbz22mt5LgScH1FRUWRlZXnLA1CvXr3jvm6gDRs2ICI0bOgsL3Pbbbfx/vvv07t3b/r3709CQgJvvvkmP/zwQ57X6tKlCz/99BP9+vVj6NCh1KhRg9GjR3sDojGF5ZdffiEpKYklS5Z40yJFGNSmAQ+3a0yFcpE5nlvSny/BWLAKc1Fdk/yeWTmJJfeQ06Nq1aps376ds88+2xucghk4cCADBw5k/fr1fPfddzz66KPce++9fP7554W6jFCNGs4Skvv376datWp55C6YDz/8kA4dOlC9enUOHDjABx98wKhRo3jssce8eWbMmOF3TrC6rVy5ku+//5733nuPm266yZs+adIkb7A1pqAyFs/ye66UdWkfnvnmB55++mnvoB+AM888k1eH3MlpS/4DmUdzvmAYfL4EY6MBw1xU285E9xyMxNcCBImvRXTPwSU+uKJjx46kp6cHHcCwYcMGAH777Tdvy6dJkybceuutXHXVVWzatAnA2x1YGB/ULVu2JCIignnz5vmlp6amHtd1n3rqKebPn88TTzwBQGZmJllZWcd0+fmOqgKnbgcOHODIkew/MtLT0wH8zlVV9uzZc1xlNCcuzwAsp/dF+WnlbyR2u4HRo0d7A1X58uV56qmnWLRoEe1630V0r6EQ57PdTFR59334fL4EYy2rUiCqbeew++Xp0qULl156KQ888AAbNmzgoosu4uDBg3z66aekpaXx9ddfM3HiRObOnUu/fv1o3Lgx69ev56OPPuK+++4DnNZZs2bNeO6554iLi2PXrl306NEjjzsHV79+fa6++moGDx7M4cOHiY+PJzk5mffeey/fQ9fXrFnDt99+S1paGhs2bOCjjz5i/vz5PPPMM975V1WrVuWcc85h9OjRREZGUq5cOd566y2+/PJLbzchQLt27UhPT2fAgAFcdtllpKWl0b17dxo0aMDQoUN54IEHSE1N5eWXX+aHH37gwgsvDKne5sSWkTwFMo5wKCOTkT/+zqRf/vDbO+n81qcz5cOPad68uTctHD9P8iWUURn2Kr7RgOEgp1F7aWlpOmzYMG3atKlGRUVp7dq1tUuXLpqcnKyqqosXL9brr79eGzZsqBUqVNBm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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_parity(y_test, y_pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sandbox"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
#
# $ nix-shell --pure --arg withBoost false --argstr tag 20.09
#
{
tag ? "20.09",
pymksVersion ? "cf653e004848c9c68ca31a85add0d1ac8611a93f"
}:
let
pkgs = import (builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/${tag}.tar.gz") {};
pymkssrc = builtins.fetchTarball "https://github.com/materialsinnovation/pymks/archive/${pymksVersion}.tar.gz";
pymks = pypkgs.callPackage "${pymkssrc}/default.nix" { graspi = null; };
pypkgs = pkgs.python3Packages;
extra = with pypkgs; [ black pylint flake8 ipywidgets zarr pymks h5py ];
in
(pymks.overridePythonAttrs (old: rec {
propagatedBuildInputs = old.propagatedBuildInputs;
nativeBuildInputs = propagatedBuildInputs ++ extra;
postShellHook = ''
export OMPI_MCA_plm_rsh_agent=${pkgs.openssh}/bin/ssh
SOURCE_DATE_EPOCH=$(date +%s)
export PYTHONUSERBASE=$PWD/.local
export USER_SITE=`python -c "import site; print(site.USER_SITE)"`
export PYTHONPATH=$PYTHONPATH:$USER_SITE
export PATH=$PATH:$PYTHONUSERBASE/bin
jupyter nbextension install --py widgetsnbextension --user > /dev/null 2>&1
jupyter nbextension enable widgetsnbextension --user --py > /dev/null 2>&1
pip install jupyter_contrib_nbextensions --user > /dev/null 2>&1
jupyter contrib nbextension install --user > /dev/null 2>&1
jupyter nbextension enable spellchecker/main > /dev/null 2>&1
pip install --user nbqa
pip install --user tqdm
pip install --user modAL
'';
}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment