mirror of
https://github.com/cdtools-developers/cdtools.git
synced 2026-09-27 20:52:08 +02:00
Add example patterns for jupyter notebooks
This commit is contained in:
+2
-1
@@ -10,4 +10,5 @@ build/*
|
||||
dist
|
||||
*/example_data/*
|
||||
*.h5
|
||||
.DS_Store
|
||||
.DS_Store
|
||||
.ipynb_checkpoints
|
||||
@@ -0,0 +1,151 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "286054ce",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"%matplotlib inline\n",
|
||||
"import cdtools\n",
|
||||
"import torch as t\n",
|
||||
"from matplotlib import pyplot as plt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "955bb242-e2ed-47c3-919c-1ea690681445",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Load and inspect a dataset\n",
|
||||
"\n",
|
||||
"filename = 'example_data/lab_ptycho_data.cxi'\n",
|
||||
"dataset = cdtools.datasets.Ptycho2DDataset.from_cxi(filename)\n",
|
||||
"\n",
|
||||
"dataset.inspect();"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "82f71fb4-f013-46bb-817b-1973ba23336a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Initialize a model from the dataset and move it to the GPU.\n",
|
||||
"\n",
|
||||
"model = cdtools.models.FancyPtycho.from_dataset(\n",
|
||||
" dataset,\n",
|
||||
" n_modes=3, # Use 3 incoherently mixing probe modes\n",
|
||||
" oversampling=2, # Simulate the probe on a 2xlarger real-space array\n",
|
||||
" probe_support_radius=120, # Force the probe to 0 outside a radius of 120 pix\n",
|
||||
" propagation_distance=5e-3, # Propagate the initial probe guess by 5 mm\n",
|
||||
" units='mm', # Set the units for the live plots\n",
|
||||
" obj_view_crop=-50, # Expands the field of view in the object plot by 50 pix,\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"if t.cuda.is_available():\n",
|
||||
" model.to(device='cuda')\n",
|
||||
" dataset.get_as(device='cuda')\n",
|
||||
"\n",
|
||||
"# Then, create a reconstructor object and view the initialized model\n",
|
||||
"\n",
|
||||
"recon = cdtools.reconstructors.AdamReconstructor(model, dataset)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "0e22a65e-280b-428d-a6f5-f3206d22110b",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Workaround reconstruction pattern for interactive plotting in jupyter:\n",
|
||||
"# First, a standalone cell to plot the current model state\n",
|
||||
"\n",
|
||||
"model.inspect(dataset, replot_all=True);"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "81a768b5",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Second, a cell for running the reconstruction. With this pattern, it is safe\n",
|
||||
"# to interrupt the kernel. Then, the cell above can be re-run to refresh the plots.\n",
|
||||
"while model.epoch < 50:\n",
|
||||
" for loss in recon.optimize(1, lr=0.02, batch_size=10):\n",
|
||||
" print(model.report())\n",
|
||||
"\n",
|
||||
"while model.epoch < 100:\n",
|
||||
" for loss in recon.optimize(1, lr=0.005, batch_size=10):\n",
|
||||
" print(model.report())"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "237e9286-b6cf-41dc-aeb0-89abfe59b37c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Save out the results\n",
|
||||
"\n",
|
||||
"model.save_to_h5('lab_ptycho_reconstruction.h5', dataset)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "0f1565b6",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Finalize the plotting and create the comparison plot\n",
|
||||
"\n",
|
||||
"# This orthogonalizes the recovered probe modes. It is best to do so\n",
|
||||
"# after saving the results, if you intend to initialize any further\n",
|
||||
"# reconstructions with the probe.\n",
|
||||
"model.tidy_probes()\n",
|
||||
"\n",
|
||||
"# Final plotting\n",
|
||||
"model.inspect(dataset)\n",
|
||||
"model.compare(dataset);"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "63ec3aa4-0d1c-4775-9fb2-3002d404faa4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"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.11.5"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "286054ce",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"%matplotlib widget\n",
|
||||
"import cdtools\n",
|
||||
"import torch as t\n",
|
||||
"from matplotlib import pyplot as plt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "955bb242-e2ed-47c3-919c-1ea690681445",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Load and inspect a dataset\n",
|
||||
"\n",
|
||||
"filename = 'example_data/lab_ptycho_data.cxi'\n",
|
||||
"dataset = cdtools.datasets.Ptycho2DDataset.from_cxi(filename)\n",
|
||||
"\n",
|
||||
"dataset.inspect();"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "82f71fb4-f013-46bb-817b-1973ba23336a",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Initialize a model from the dataset and move it to the GPU.\n",
|
||||
"\n",
|
||||
"model = cdtools.models.FancyPtycho.from_dataset(\n",
|
||||
" dataset,\n",
|
||||
" n_modes=3, # Use 3 incoherently mixing probe modes\n",
|
||||
" oversampling=2, # Simulate the probe on a 2xlarger real-space array\n",
|
||||
" probe_support_radius=120, # Force the probe to 0 outside a radius of 120 pix\n",
|
||||
" propagation_distance=5e-3, # Propagate the initial probe guess by 5 mm\n",
|
||||
" units='mm', # Set the units for the live plots\n",
|
||||
" obj_view_crop=-50, # Expands the field of view in the object plot by 50 pix,\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"if t.cuda.is_available():\n",
|
||||
" model.to(device='cuda')\n",
|
||||
" dataset.get_as(device='cuda')\n",
|
||||
"\n",
|
||||
"# Then, create a reconstructor object and view the initialized model\n",
|
||||
"\n",
|
||||
"recon = cdtools.reconstructors.AdamReconstructor(model, dataset)\n",
|
||||
"model.inspect(dataset);"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "81a768b5",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Workaround reconstruction pattern for interactive plotting in jupyter:\n",
|
||||
"\n",
|
||||
"# With this pattern, it is safe to interrupt the kernel. Doing so will\n",
|
||||
"# trigger an update of the plots, at which point the current state can\n",
|
||||
"# be viewed. Then this cell can be re-run to continue the reconstruction\n",
|
||||
"while model.epoch < 50:\n",
|
||||
" for loss in recon.optimize(1, lr=0.02, batch_size=10):\n",
|
||||
" print(model.report())\n",
|
||||
" model.inspect(dataset, min_interval=10)\n",
|
||||
"\n",
|
||||
"while model.epoch < 100:\n",
|
||||
" for loss in recon.optimize(1, lr=0.005, batch_size=10):\n",
|
||||
" print(model.report())\n",
|
||||
" model.inspect(dataset, min_interval=10)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "237e9286-b6cf-41dc-aeb0-89abfe59b37c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Save out the results\n",
|
||||
"\n",
|
||||
"model.save_to_h5('lab_ptycho_reconstruction.h5', dataset)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "0f1565b6",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Finalize the plotting and create the comparison plot\n",
|
||||
"\n",
|
||||
"# This orthogonalizes the recovered probe modes. It is best to do so\n",
|
||||
"# after saving the results, if you intend to initialize any further\n",
|
||||
"# reconstructions with the probe.\n",
|
||||
"model.tidy_probes()\n",
|
||||
"\n",
|
||||
"# Final plotting\n",
|
||||
"model.inspect(dataset)\n",
|
||||
"model.compare(dataset);"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "63ec3aa4-0d1c-4775-9fb2-3002d404faa4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"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.11.5"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
Reference in New Issue
Block a user