Giter Site home page Giter Site logo

xanaduai / quantum-learning Goto Github PK

View Code? Open in Web Editor NEW
110.0 17.0 38.0 1.96 MB

This repository contains the source code used to produce the results presented in the paper "Machine learning method for state preparation and gate synthesis on photonic quantum computers".

Home Page: https://arxiv.org/abs/1807.10781

License: Apache License 2.0

Python 32.37% Jupyter Notebook 67.63%
quantum quantum-computing photonics machine-learning optimization tensorflow quantum-machine-learning

quantum-learning's Introduction

Quantum state learning and gate synthesis

This repository contains the source code used to produce the results presented in "Machine learning method for state preparation and gate synthesis on photonic quantum computers" Quantum Science and Technology, 4 024004 (2019).

Contents

  • state_learner.py: a Python script to automate quantum state learning using continuous-variable (CV) variational quantum circuits. Simply specify your one- or two-mode target state, along with other hyperparameters, and this script automatically constructs and optimizes the variational quantum circuit.

  • gate_synthesis.py: a Python script to automate quantum gate synthesis using continuous-variable (CV) variational quantum circuits. Simply specify your one- or two-mode target unitary, along with other hyperparameters, and this script automatically constructs and optimizes the variational quantum circuit.

  • learner: a Python module containing the following importable Python files:

    • states.py: functions to generate the states analyzed in the paper.
    • gates.py: functions to generate the states analyzed in the paper.
    • plots.py: functions to generate the plots and visualizations in the paper.
    • circuits.py: functions to construct the one-mode and two-mode variational circuits as described in the paper Continuous-variable quantum neural networks.
  • Jupyter notebooks: two Jupyter notebooks are also provided, StateLearning.ipynb and GateSynthesis.ipynb, walking through the process of state learning and gate synthesis respectively.

  • Results and data presented in arXiv:1807.10781: contains two sub folders; gate_results and state_results, each with NumPy npz files containing the hyperparameters and circuit parameters of the synthesized gates and learnt states presented in arXiv:1807.10781. Refer to these folder for more informtion on the data contained.

Requirements

To construct and optimize the variational quantum circuits, these scripts and notebooks use the TensorFlow backend of Strawberry Fields. In addition, matplotlib is required for generating output plots, and OpenFermion is used to construct target gate unitaries.

Using the scripts

To use the scripts, simply set the hyperparameters - either by modifying the default hyperparameters in the file itself, or passing the relevant command line arguments - and then run the script using Python 3:

python3 state_learner.py

The outputs of the simulations will be saved in the directory out_dir/simulation_ID, with out_dir set by the hyperparameter dictionary, and simulation_ID determined automatically based on the simulation name.

After every optimization, plots and visualisations of the target and learnt state/gate are generated, as well as a NumPy multi-array file simulation_ID.npz. This file contains all the hyperparameters that characterize the simulation, as well as the results - including the target and learnt state/gate, and the optimized variational circuit gate parameters.

To access the saved data, the file can be loaded using NumPy:

results = np.load('simulation_ID.npz')

The individual hyperparameters and results can then be accessed via the respective key. For example, to extract the learnt state, as well as a list of the variational circuit layer squeezing magnitudes:

learnt_state = results['learnt_state']
squeezing = results['sq_r']

For a list of all available keys, simply run print(results.keys()).

State learner hyperparameters

The following hyperparameters can be set for the script state_learner.py:

Hyperparameter Command line argument Description
name -n/--name The name of the simulation
out_dir -o/--out-dir Output directory for saving the simulation results
target_state_fn n/a Function for generating the target state for optimization. This function can accept an optional list of state parameters, along with the required keyword argument cutoff which determines the Fock basis truncation. The function must return a NumPy array of length [cutoff] for single mode states, and length [cutoff^2] for two mode states.
state_params -p/--state-params Optional dictionary of state parameters to pass to the target state function, for example {"N": 3}.
cutoff -c/--cutoff The simulation Fock basis truncation.
depth -d/--depth Number of layers in the variational quantum circuit.
reps -r/--reps Number of optimization steps to perform.
active_sd n/a Standard deviation of initial photon non-preserving gate parameters in the variational quantum circuit.
passive_sd n/a Standard deviation of initial photon preserving gate parameters in the variational quantum circuit.

The target state function can be defined manually in Python and added to the hyperparameters dictionary, or imported from the file learners/states.py. After the optimization is complete, the state learning script will automatically generate the following plots:

  • Cost function vs. optimization step
  • Wigner functions of the target state and the learnt state (for one mode states only)
  • Wavefunctions of the target state and the learnt state.

Gate synthesis hyperparameters

The following hyperparameters can be set for the script gate_synthesis.py:

Hyperparameter Command line argument Description
name -n/--name The name of the simulation
out_dir -o/--out-dir Output directory for saving the simulation results
target_unitary_fn n/a Function for generating the target unitary for synthesis. This function can accept an optional list of gate parameters, along with the required keyword argument cutoff which determines the Fock basis truncation. The function must return a NumPy array of size [cutoff, cutoff] for single mode unitaries, and size [cutoff^2, cutoff^2] for two mode unitaries.
target_params -p/--target-params Optional dictionary of gate parameters to pass to the target unitary function, for example {"gamma": 0.01}.
cutoff -c/--cutoff The simulation Fock basis truncation.
gate_cutoff -g/--gate-cutoff the d-dimensional subspace in which the target unitary acts. The value of the gate cutoff must be less than or equal to the simulation cutoff.
depth -d/--depth Number of layers in the variational quantum circuit.
reps -r/--reps Number of optimization steps to perform.
active_sd n/a Standard deviation of initial photon non-preserving gate parameters in the variational quantum circuit.
passive_sd n/a Standard deviation of initial photon preserving gate parameters in the variational quantum circuit.
maps_outside n/a Set to True if the target unitary maps Fock states within the d-dimensional subspace specified by the gate cutoff to Fock states outside of the d-dimensional subspace. If unsure, set to True.

The target unitary function can be defined manually in Python and added to the hyperparameters dictionary, or imported from the file learners/gates.py. After the optimization is complete, the gate synthesis script will automatically calculate the process fidelity and average fidelity of the two unitaries, and generate the following plots:

  • Cost function vs. optimization step
  • Wigner functions of the target unitary and the learnt unitary applied to the equal superposition state (for one mode states only)
  • Wavefunctions of the target unitary and the learnt unitary applied to the equal superposition state (for two mode states only)
  • Matrix plots of the real and imaginary elements of the target unitary and learnt unitary.

Authors

Juan Miguel Arrazola, Thomas R. Bromley, Josh Izaac, Casey R. Myers, Kamil Brádler, and Nathan Killoran.

If you are doing any research using this source code and Strawberry Fields, please cite the following two papers:

Juan Miguel Arrazola, Thomas R. Bromley, Josh Izaac, Casey R. Myers, Kamil Brádler, and Nathan Killoran. Machine learning method for state preparation and gate synthesis on photonic quantum computers. Quantum Science and Technology, 4 024004 (2019).

Nathan Killoran, Josh Izaac, Nicolás Quesada, Ville Bergholm, Matthew Amy, and Christian Weedbrook. Strawberry Fields: A Software Platform for Photonic Quantum Computing. arXiv, 2018. Quantum, 3, 129 (2019).

License

This source code is free and open source, released under the Apache License, Version 2.0.

quantum-learning's People

Contributors

co9olguy avatar josh146 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quantum-learning's Issues

New Tensorflow Version Difficulties

I know this project was developed quite a while ago, but it'd still be very interesting and useful to be able to run at least the notebooks.
However, as of now there are plenty of error messages popping up right one after another when trying to run it with newer versions of packages, especially Tensorflow.
Could it be possible to get at least an incomplete list of requirements of certain package versions with which it would be possible to run at least the notebooks?
Until then I'll try to rewrite them so they perform the same thing but with new Tensorflow versions.

Thanks in advance!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.