Skip to main content

PyTorch plugin.

Project description

This plugin provides an interface between D-Wave’s quantum computers and the PyTorch framework, including neural network modules for building and training Boltzmann Machines along with various sampler utility functions.

Example

Boltzmann Machines are probabilistic generative models for high-dimensional binary data. The following example walks through a typical workflow for fitting Boltzmann Machines via maximum likelihood.

Define a Graph-Restricted Boltzmann Machine with a square graph

import torch
from torch.optim import SGD

from dwave.plugins.torch.models import GraphRestrictedBoltzmannMachine as GRBM
from dwave.plugins.torch.samplers import BlockSampler

grbm = GRBM(nodes=["a", "b", "c", "d"], edges=[("a", "b"), ("b", "c"), ("c", "d"), ("d", "a")])
print("Linear weights:", grbm.linear)
print("Quadratic weights:", grbm.quadratic)

Instantiate a block-Gibbs sampler. Variables “a” and “c” are in block 0; variables “b” and “d” are in block 1. The sampler consists of three parallel Markov chains of length ten each. Each Markov chain samples at a constant unit inverse temperature.

sampler = BlockSampler(grbm=grbm, crayon=lambda v: v in {"b", "d"}, num_chains=3, schedule=[1]*10)

Create a batch of data and perform one likelihood-optimization step

x_data = torch.tensor([[1, -1, 1, -1], [-1, 1, 1, 1]], dtype=torch.float32)
optimizer = SGD(grbm.parameters(), lr=1)
x_model = sampler.sample()
grbm.quasi_objective(x_data, x_model).backward()
optimizer.step()
print("Updated quadratic weights:", grbm.quadratic)

To use a dimod sampler, replace the sampler = BlockSampler(...) line with

from dwave.plugins.torch.samplers import DimodSampler
from dwave.samplers import RandomSampler
sampler = DimodSampler(grbm=grbm, sampler=RandomSampler(),
                       prefactor=1, sample_kwargs=dict(num_reads=5))

License

Released under the Apache License 2.0. See LICENSE file.

Contributing

Ocean’s contributing guide has guidelines for contributing to Ocean packages.

Release Notes

dwave-pytorch-plugin uses reno to manage its release notes.

When making a contribution to dwave-pytorch-plugin that will affect users, create a new release note file by running

reno new your-short-descriptor-here

You can then edit the file created under releasenotes/notes/. Remove any sections not relevant to your changes. Commit the file along with your changes.

See reno’s user guide for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dwave_pytorch_plugin-0.3.1.tar.gz (52.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dwave_pytorch_plugin-0.3.1-py3-none-any.whl (73.9 kB view details)

Uploaded Python 3

File details

Details for the file dwave_pytorch_plugin-0.3.1.tar.gz.

File metadata

  • Download URL: dwave_pytorch_plugin-0.3.1.tar.gz
  • Upload date:
  • Size: 52.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for dwave_pytorch_plugin-0.3.1.tar.gz
Algorithm Hash digest
SHA256 666db40cc62d75c8edeaf492c6a753f363770045af8cdffaf20db15062877301
MD5 2afb501f71937cee36e644ac2d3c2779
BLAKE2b-256 52eca49deb7de75d96f36cc5c4c7c579c2daa7bc5b4fb4f55076876f524e6c61

See more details on using hashes here.

File details

Details for the file dwave_pytorch_plugin-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for dwave_pytorch_plugin-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 786cef9b00ac411b2258408fabbe3920d7e0956343a7cb7e86bf127eb60a0675
MD5 033985ce863ff3b7f12968aff2a4ab02
BLAKE2b-256 182e62d039c6d9504c3b2d510db418d3a00124288628e063939f31570e32c322

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page