{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Unitary Matrix Networks in the Time Domain" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Photontorch\n", "import photontorch as pt\n", "\n", "# Python\n", "import torch\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from tqdm.notebook import trange\n", "\n", "# numpy settings\n", "np.random.seed(6) # seed for random numbers\n", "np.set_printoptions(precision=2, suppress=True) # show less numbers while printing numpy arrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Schematic\n", "![Unitary Matrix Paper](images/clements.jpeg)\n", "\n", "(a) Reck Design\n", "\n", "(b) Clements Design" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulation and Design Parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will use the matrix network *with* delays." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
keyvaluedescription
nameenvname of the environment
t[0.000e+00, 1.000e-13, ..., 1.980e-11][s] full 1D time array.
t00.000e+00[s] starting time of the simulation.
t11.990e-11[s] ending time of the simulation.
num_t199number of timesteps in the simulation.
dt1.000e-13[s] timestep of the simulation
samplerate1.000e+13[1/s] samplerate of the simulation.
bitrateNone[1/s] bitrate of the signal.
bitlengthNone[s] bitlength of the signal.
wl1.550e-06[m] full 1D wavelength array.
wl01.550e-06[m] start of wavelength range.
wl1None[m] end of wavelength range.
num_wl1number of independent wavelengths in the simulation
dwlNone[m] wavelength step sizebetween wl0 and wl1.
f1.934e+14[1/s] full 1D frequency array.
f01.934e+14[1/s] start of frequency range.
f1None[1/s] end of frequency range.
num_f1number of independent frequencies in the simulation
dfNone[1/s] frequency step between f0 and f1.
c2.998e+08[m/s] speed of light used during simulations.
freqdomainFalseonly do frequency domain calculations.
gradFalsetrack gradients during the simulation
\n", "
" ], "text/plain": [ "Environment(name='env', t=array([0.000e+00, 1.000e-13, ..., 1.980e-11]), t0=0.000e+00, t1=1.990e-11, num_t=199, dt=1.000e-13, samplerate=1.000e+13, bitrate=None, bitlength=None, wl=array([1.550e-06]), wl0=1.550e-06, wl1=None, num_wl=1, dwl=None, f=array([1.934e+14]), f0=1.934e+14, f1=None, num_f=1, df=None, c=2.998e+08, freqdomain=False, grad=False)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N = 4\n", "length = 25e-6 #[m]\n", "transmission = 0.5 #[]\n", "neff = 2.86\n", "env = pt.Environment(\n", " t_start = 0,\n", " t_end = 2000e-14,\n", " dt = 1e-13,\n", " wl = 1.55e-6,\n", ")\n", "pt.set_environment(env)\n", "\n", "source = torch.ones(N, names=[\"s\"])/np.sqrt(N) # Source tensors with less than 4D need to have named dimensions.\n", "\n", "env" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A. Reck Design" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "nw = pt.ReckNxN(\n", " N=N, \n", " wg_factory=lambda: pt.Waveguide(length=1e-4, phase=2*np.pi*np.random.rand(), trainable=True),\n", " mzi_factory=lambda: pt.Mzi(length=1e-4, phi=2*np.pi*np.random.rand(), theta=2*np.pi*np.random.rand(), trainable=True),\n", ").terminate()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulation" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "detected_time = nw(source)\n", "nw.plot(detected_time[:,0,:,0]); # plot first and only batch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Total power recovered:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor(1.0000)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "detected_time[-1,0,:,0].sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimizing the coupling" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The goal is to optimize the coupling of the network such that we have the same output at the 4 detectors with an as high as possible amplitude (ideally, higher than in the equal coupling case)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "dcce6534e13048d997cf85eb28519ec6", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=50.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "def train_for_same_output(nw, num_epochs=50, learning_rate=0.1):\n", " target = torch.tensor([1.0/N]*N, device=nw.device)\n", " lossfunc = torch.nn.MSELoss()\n", " optimizer = torch.optim.Adam(nw.parameters(), lr=learning_rate)\n", " with pt.Environment(wl=1.55e-6, t0=0, t1=10e-12, dt=1e-13, grad=True):\n", " range_ = trange(num_epochs)\n", " for epoch in range_:\n", " det_train = nw(source)[-1,0,:,0]\n", " loss = lossfunc(det_train, target)\n", " loss.backward()\n", " optimizer.step()\n", " range_.set_postfix(loss=loss.item())\n", " \n", "train_for_same_output(nw)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Final Simulation" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 42.5 ms, sys: 77 µs, total: 42.6 ms\n", "Wall time: 41.9 ms\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%time det_train = nw(source)\n", "nw.plot(det_train[:,0,:,0]); # plot first and only batch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that in the Reck network, signals arrive at different times." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Total power recovered" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor(1.)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "det_train[-1,0,:,0].sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## B. Clements Design" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "nw = pt.ClementsNxN(\n", " N=N, \n", " capacity=N,\n", " wg_factory=lambda: pt.Waveguide(length=1e-4, phase=2*np.pi*np.random.rand(), trainable=True),\n", " mzi_factory=lambda: pt.Mzi(length=1e-4, phi=2*np.pi*np.random.rand(), theta=2*np.pi*np.random.rand(), trainable=True),\n", ").terminate()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulation" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "detected_time = nw(source)\n", "nw.plot(detected_time[:,0,:,0]); # plot first and only batch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Total power recovered:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor(1.)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "detected_time[-1,0,:,0].sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimizing the coupling" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "2215b99db96b47889cd4da1c0339b054", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=50.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "def train_for_same_output(nw, num_epochs=50, learning_rate=0.1):\n", " target = torch.tensor([1.0/N]*N, device=nw.device)\n", " lossfunc = torch.nn.MSELoss()\n", " optimizer = torch.optim.Adam(nw.parameters(), lr=learning_rate)\n", " with pt.Environment(wl=1.55e-6, t0=0, t1=10e-12, dt=1e-13, grad=True):\n", " range_ = trange(num_epochs)\n", " for epoch in range_:\n", " det_train = nw(source)[-1,0,:,0] # get first and only batch\n", " loss = lossfunc(det_train, target)\n", " loss.backward()\n", " optimizer.step()\n", " range_.set_postfix(loss=loss.item())\n", " \n", "train_for_same_output(nw)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Final Simulation" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 41.1 ms, sys: 21 µs, total: 41.1 ms\n", "Wall time: 40.4 ms\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%time det_train = nw(source)\n", "nw.plot(det_train[:,0,:,0]); # plot first and only batch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that in the Clements network, all signals arrive at the same time at the detector." ] } ], "metadata": { "kernelspec": { "display_name": "ptdev", "language": "python", "name": "ptdev" }, "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }