quantum-perceptron / README.md
ashutosh1919's picture
Added ref
03490a8
---
title: Simulate Quantum Perceptron
emoji:
colorFrom: blue
colorTo: blue
sdk: gradio
sdk_version: 3.24.1
app_file: gradio_app.py
pinned: false
license: apache-2.0
---
# Quantum Perceptron
[![Python Version](https://img.shields.io/badge/python->=3.8-blue.svg?style=flat-square)](#python) [![Price](https://img.shields.io/badge/price-free-ff69b4.svg?style=flat-square)](#price) [![Maintained](https://img.shields.io/badge/maintained-yes-green.svg?style=flat-square)](#maintained)
**Implementation of Quantum Perceptron: An Artificial Neuron Implemented on an Actual Quantum Processor.**
This project implements McCullogh-Pitts Perceptron as described in [An Artificial Neuron Implemented on an Actual Quantum Processor](https://arxiv.org/abs/1811.02266) on IBM's [Qiskit](https://qiskit.org/) quantum simulator.
The repository contains the extensive codebase to create quantum perceptron circuit based on specific weight and input data. Moreover, we created training data as shown in the paper (checkboard patterns for different numbers) and simulated the training using single perceptron to update the weight. You can have a look at perceptron training in [`TrainPerceptron.ipynb`](./TrainPerceptron.ipynb). We have used training details from [this article on nature](https://www.nature.com/articles/s41534-019-0140-4) by the authors of the original paper.
Moreover, the authors of the paper evaluates single perceptron for different weight-input pairs and generate visualization. They prove that the probability (output of perceptron) is 1 when `weight = input`. We have simulated the same thing and created visualization in [`PerceptronSimulator.ipynb`](./PerceptronSimulator.ipynb).
## Usage
We have created the codebase such that the perceptron circuit can be utilized directly for any other usage. The code is scalable and takes the most possibilities into account. Note that we are deliberately raising error in case the perceptron with more than 9 qubits is initialized.
To use the perceptron, you will need to clone this repository and add the repository directory to `$PATH`:
```bash
git clone https://github.com/ashutosh1919/quantum-perceptron.git
export PATH=./quantum_perceptron:$PATH
```
Now, you can use the perceptron codebase in your own project. To get started with experimenting on quantum perceptron, you can use below starter code:
```python
from quantum_perceptron import Perceptron
from quantum_perceptron.utils import (
calculate_succ_probability,
plot_img_from_data
)
# Define perceptron initial parameter
num_qubits = 4
input_data = 12
weight_data = 626
# You can visualize input/weight data in checkboard pattern
plot_img_from_data(
data=weight,
num_qubits=num_qubits
)
# Intialize perceptron object
perceptron = Perceptron(
num_qubits=num_qubits,
weight=weight_data,
input=input
)
# Generate measurement outcomes for 3000 number of iterations
counts = perceptron.measure_circuit(
num_iters=3000
)
# Find the success probability (Number of 1s)/(Total iterations)
prob = calculate_succ_probability(counts)
# Draw circuit
perceptron.save_circuit_image(
file_path='qubit_4_circ.png',
output_format="mpl"
)
```
The checkboard pattern image generated by the above code will look something like this:
![](./images/checkboard_626.png)
The saved image for the perceptron circuit of 4 qubits looks something like this:
![](./images/circuit_4qubit.png)
In the above circuit, we can see two components `U_i` and `U_w`. These components are specifically to process input and weight data values respectively. The circuit is different for different values of input and weight. For more information, please take a look at the descriptions in the paper. For implementation, you can take a look at [`perceptron.py`](./quantum_perceptron/perceptron.py).
## Reference
An Artificial Neuron Implemented on an Actual Quantum Processor -- https://arxiv.org/abs/1811.02266
```
@article{Tacchino_2019,
doi = {10.1038/s41534-019-0140-4},
url = {https://doi.org/10.1038%2Fs41534-019-0140-4},
year = 2019,
month = {mar},
publisher = {Springer Science and Business Media {LLC}},
volume = {5},
number = {1},
author = {Francesco Tacchino and Chiara Macchiavello and Dario Gerace and Daniele Bajoni},
title = {An artificial neuron implemented on an actual quantum processor},
journal = {npj Quantum Information}
}
```
## License
See the [LICENSE](LICENSE) file.