கிஸ்கிட் இயந்திர கற்றல் v0.5 இடம்பெயர்வு வழிகாட்டி#

இந்த டுடோரியல் உங்கள் குறியீட்டை Qiskit Machine Learning v0.4 இலிருந்து v0.5 க்கு மாற்றும் செயல்முறையின் மூலம் உங்களுக்கு வழிகாட்டும்.

அறிமுகம்#

Qiskit மெஷின் லேர்னிங்கின் 0.5 வெளியீட்டின் முக்கிய கவனம் குவாண்டம் கர்னல்கள் மற்றும் குவாண்டம் நியூரல் நெட்வொர்க்குகள் போன்ற அடிப்படை கணக்கீட்டு தொகுதிகளை Qiskit இல் அறிமுகப்படுத்தப்பட்ட பழமையானவற்றிற்கு நகர்த்துவது மற்றும் அல்காரிதங்களில் உள்ள ஆதிநிலைகளின் நீட்டிக்கப்பட்ட ஆதரவு ஆகும்.

உள்ளடக்கம்:

  • தொடக்கநிலைகளின் கண்ணோட்டம்

  • புதிய குவாண்டம் கர்னல்

  • புதிய குவாண்டம் நியூரல் நெட்வொர்க்குகள்

  • மற்ற குறிப்பிடத் தக்க நிராகரிப்பு

தொடக்கநிலைகளின் கண்ணோட்டம்#

கிளாசிக்கல் கம்ப்யூட்டர்களில் இருந்து தனித்து நிற்கும் குவாண்டம் கணினிகளின் முக்கிய திறன், அவற்றின் வெளியீடுகளில் கிளாசிக்கல் அல்லாத நிகழ்தகவு விநியோகங்களை உருவாக்கும் திறன் ஆகும். ஒரு நிகழ்தகவு விநியோகத்துடன் ஒருவர் செய்யக்கூடிய சொந்த செயல்பாடுகள் அதிலிருந்து மாதிரி அல்லது அதன் அளவை மதிப்பிடுவது. இதன் விளைவாக, இந்த மாதிரி மற்றும் மதிப்பிடும் செயல்பாடுகள் குவாண்டம் அல்காரிதம் வளர்ச்சியின் அடிப்படை கட்டுமான தொகுதிகளாக அமைகின்றன. எனவே, <https://research.ibm.com/blog/qiskit-runtime-for-useful-quantum-computing>`__ என அறிவிக்கப்பட்டபடி, இரண்டு அடிப்படை ஆதிநிலைகள் அறிமுகப்படுத்தப்பட்டன, முறையே, சாம்ப்லர் மற்றும் எஸ்டிமேட்டர், இவைகளைச் செயல்படுத்துகின்றன. இரண்டு செயல்பாடுகள்:

  • குவாண்டம் சர்க்யூட்களிலிருந்து பிட்ஸ்ட்ரிங்ஸின் நிகழ்தகவுகள் அல்லது அரை-நிகழ்தகவுகளை மாதிரி வகுப்பு கணக்கிடுகிறது. அடிப்படை வகுப்பு qiskit.primitives.BaseSampler.

  • மதிப்பீட்டாளர் வகுப்பு குவாண்டம் சுற்றுகள் மற்றும் கவனிக்கக்கூடியவற்றின் எதிர்பார்ப்பு மதிப்புகளை மதிப்பிடுகிறது. அடிப்படை வகுப்பு qiskit.primitives.BaseEstimator.

கிஸ்கிட் டெர்ரா முக்கிய இடைமுகங்கள் மற்றும் இரண்டு செயலாக்கங்களை வழங்குகிறது:

  • ஸ்டேட்வெக்டர் அடிப்படையிலான குறிப்புச் செயலாக்கம். இந்தச் செயலாக்கத்திற்கு பின்தளம் அல்லது சிமுலேட்டர் தேவைப்படுகிறது, இது குவாண்டம்_இன்ஃபோ தொகுப்பிலிருந்து வரும் வகுப்புகளைச் சார்ந்துள்ளது.

  • பேக்கெண்ட் அடிப்படையிலான ப்ரிமிடிவ்கள், ப்ரைமிடிவ்களை நேரடியாக ஆதரிக்காத வழங்குநர்/பின்னணிகளை ஆதரிப்பதாகும். இந்தச் செயலாக்கத்திற்கு, ஒரு முதற்பொருளுக்கு அனுப்பப்பட்ட பின்தளத்தின் உதாரணம் தேவைப்படுகிறது.

Qiskit Terra primitives பற்றிய கூடுதல் தகவல்களை ஆவணம் இல் காணலாம்.

மற்ற செயலாக்கங்களையும் குறிப்பிடுவது மதிப்பு:

  • ஏர் சிமுலேட்டருக்கு ஏர் ப்ரிமிடிவ்ஸ் பயன்படுத்தப்பட வேண்டும். அவை டெர்ராவிலிருந்து தொடர்புடைய இடைமுகங்களை விரிவுபடுத்துகின்றன, மேலும் டெர்ராவிலிருந்து பழமையானவற்றைப் போலவே பயன்படுத்தலாம். மேலும் தகவலுக்கு ஆவணம் ஐப் பார்க்கவும்.

  • IBM சாதனங்களுடன் பயன்படுத்தப்பட வேண்டிய இயக்க நேர முதன்மைகள். இது உண்மையான வன்பொருளில் கிளவுட் கம்ப்யூட்டிங்கில் கவனம் செலுத்தும் செயலாக்கமாகும். `இங்கே <https://qiskit.org/documentation/partners/qiskit_ibm_runtime/apidocs/runtime_service.html>`__ஐப் பார்க்கவும்.

ப்ரிமிடிவ்களுடன் டெர்ரா சில பழமையான அல்காரிதங்களைக் கொண்டுள்ளது, அவை QML இல் மிகவும் பயனுள்ளதாக இருக்கும் மற்றும் புதிய 0.5 செயல்பாடுகளால் பயன்படுத்தப்படுகின்றன:

  • Algorithms to calculate the gradient of a quantum circuit. For each core primitive there’s a corresponding base interface that defines quantum circuit gradient. The documentation on gradients is here.

  • Algorithms that compute the fidelity or “closeness” of pairs of quantum states. Currently, only one implementation is available that requires a sampler primitive and is based on the compute-uncompute method. The documentation is here.

இரண்டு புதிய அல்காரிதம்களும் முதன்மையான முதன்மைகளுடன் மிகவும் ஒத்ததாக உள்ளன, அவை ஒரே முறை கையொப்பங்களைப் பகிர்ந்து கொள்கின்றன, எனவே அவை முதன்மையான தொகுப்பில் இல்லாவிட்டாலும் அவை உயர் நிலை ப்ரிமிட்டிவ் என அழைக்கப்படலாம்.

புதிய குவாண்டம் கர்னல்#

முந்தைய செயலாக்கமானது QuantumKernel என்ற ஒற்றை வகுப்பைக் கொண்டிருந்தது:

  • கட்டப்பட்ட சுற்றுகள்

  • செயல்படுத்தப்பட்ட சுற்றுகள் மற்றும் சுற்றுகளுக்கு இடையே மதிப்பிடப்பட்ட ஒன்றுடன் ஒன்று

  • பயிற்சி அளவுருக்கள் வழங்கப்பட்டன

  • அளவுருக்களுக்கு ஒதுக்கப்பட்ட மதிப்புகளைக் கண்காணிக்கவும்.

செயல்படுத்தல் அதிநவீன மற்றும் வளைந்துகொடுக்க முடியாததாக மாறியது மற்றும் புதிய பழமையானவர்களின் ஆதரவைச் சேர்ப்பது தந்திரமானதாக இருக்கலாம். சிக்கல்களைத் தீர்க்க, குவாண்டம் கர்னல்களின் புதிய நெகிழ்வான மற்றும் நீட்டிக்கக்கூடிய வடிவமைப்பு அறிமுகப்படுத்தப்பட்டது. புதிய வடிவமைப்பின் குறிக்கோள்கள்:

  • ஆதிநிலைகளுக்கு இடம்பெயர்ந்து, நம்பக வழிமுறையைப் பயன்படுத்தவும். இப்போது பயனர்கள் நம்பகத்தன்மைக் கணக்கீடுகளின் சொந்த செயலாக்கங்களைச் செருகலாம். ஆதிநிலைகளுக்கு இடம்பெயர்ந்து, நம்பக அல்காரிதத்தைப் பயன்படுத்தவும். இப்போது பயனர்கள் நம்பகத்தன்மை கணக்கீடுகளின் சொந்த செயலாக்கங்களைச் செருகலாம்.

  • ஒரு பிரத்யேக வகுப்பிற்கு பயிற்சி அம்சத்தைப் பிரித்தெடுக்கவும்.

  • பிற கர்னல் செயலாக்கங்களால் நீட்டிக்கக்கூடிய அடிப்படை வகுப்பை அறிமுகப்படுத்தவும்.

குவாண்டம் கர்னலின் புதிய வடிவமைப்பு அடுத்த வரைபடத்தில் காட்டப்பட்டுள்ளது.

Quantum Kernel Diagram

புதிய கர்னல்கள் quantum_instance அளவுருவைத் தவிர அதே இடைமுகத்தையும் அதே அளவுருக்களையும் வெளிப்படுத்துகின்றன. இந்த அளவுருவுக்கு நேரடி மாற்றீடு இல்லை, அதற்கு பதிலாக fidelity அளவுரு பயன்படுத்தப்பட வேண்டும். முன்பு quantum_instance ஐப் பயன்படுத்தி செய்யப்பட்ட பின்தள கையாளுதல்/தேர்வு, இப்போது fidelity க்கு கொடுக்கப்பட்ட Sampler primitive மூலம் கவனிக்கப்படுகிறது.

வரைபடத்தில் காட்டப்பட்டுள்ள புதிய படிநிலை அறிமுகப்படுத்துகிறது:

  • அடிப்படை மற்றும் சுருக்க வகுப்பு BaseKernel அறிமுகப்படுத்தப்பட்டது. அனைத்து உறுதியான செயலாக்கங்களும் இந்த வகுப்பைப் பெற வேண்டும்.

  • நம்பகத்தன்மை அடிப்படையிலான குவாண்டம் கர்னல் FidelityQuantumKernel சேர்க்கப்பட்டது. இது முந்தைய குவாண்டம் கர்னல் செயலாக்கத்தின் நேரடி replacement ஆகும். வித்தியாசம் என்னவென்றால், புதிய வகுப்பு ஒன்றுடன் ஒன்று மதிப்பிடுவதற்கும் கர்னல் மேட்ரிக்ஸை உருவாக்குவதற்கும் நம்பகத்தன்மையை எடுத்துக்கொள்கிறது.

  • குவாண்டம் கர்னல்களைப் பயிற்றுவிக்கும் திறனைப் பொதுமைப்படுத்த ஒரு புதிய சுருக்க வகுப்பு TrainableKernel அறிமுகப்படுத்தப்பட்டது.

  • நம்பகத்தன்மை அடிப்படையிலான பயிற்சியளிக்கக்கூடிய குவாண்டம் கர்னல் TrainableFidelityQuantumKernel is அறிமுகப்படுத்தப்பட்டது. பயிற்சியளிக்கக்கூடிய கர்னல் தேவைப்பட்டால், இது முந்தைய குவாண்டம் கர்னலின் replacement ஆகும். பயிற்சியாளர் QuantumKernelTrainer இப்போது புதிய குவாண்டம் மற்றும் ஒரு கெர்னலைச் செயல்படுத்துகிறது.

வசதிக்காக, முந்தைய குவாண்டம் கர்னல் செயல்படுத்தல், QuantumKernel, இப்போது இரண்டும் புதிய ஆப்ஸ்காம் வகுப்புகளை விரிவுபடுத்துகிறது. அறிமுகப்படுத்தப்பட்ட புதிய இடைமுகங்களுடன். இந்தச் செயல்படுத்தல் இப்போது ** pending deprecation**, எதிர்கால வெளியீட்டில் நிறுத்தப்பட்டு, அதன் பிறகு அகற்றப்படும். அதற்கு பதிலாக புதிய, பழமையான அடிப்படையிலான குவாண்டம் கர்னல்கள் பயன்படுத்தப்பட வேண்டும்.

தற்போதுள்ள அல்காரிதம்களான QSVC, QSVR மற்றும் பிற கர்னல் அடிப்படையிலான அல்காரிதம்கள் புதுப்பிக்கப்பட்டு இரண்டு செயலாக்கங்களுடனும் வேலை செய்கின்றன.

உதாரணமாக ஒரு QSVM வகைப்படுத்தியை பின்வருமாறு பயிற்சி செய்யலாம்.

தரவுத்தொகுப்பை உருவாக்கவும்#

சீரற்றமயமாக்கலை சரிசெய்தல்.

from qiskit.utils import algorithm_globals

algorithm_globals.random_seed = 123456

Scikit-learn ஐப் பயன்படுத்தி எளிய தரவுத்தொகுப்பை உருவாக்கவும்.

from sklearn.datasets import make_blobs

features, labels = make_blobs(
    n_samples=20,
    centers=2,
    center_box=(-1, 1),
    cluster_std=0.1,
    random_state=algorithm_globals.random_seed,
)

குவாண்டம் கர்னலின் முந்தைய செயலாக்கம்#

முந்தைய செயலாக்கத்தில், QuantumInstance நிகழ்வை உருவாக்குவதிலிருந்து தொடங்குகிறோம். இந்த வகுப்பு நமது குவாண்டம் சுற்றுகள் எங்குச் செயல்படுத்தப்படுகிறது என்பதை வரையறுக்கிறது. இந்த வழக்கில் நாம் குவாண்டம் நிகழ்வில் ஒரு ஸ்டேட்வெக்டர் சிமுலேட்டரை மூடுகிறோம்.

from qiskit import BasicAer
from qiskit.utils import QuantumInstance

sv_qi = QuantumInstance(
    BasicAer.get_backend("statevector_simulator"),
    seed_simulator=algorithm_globals.random_seed,
    seed_transpiler=algorithm_globals.random_seed,
)

பின்னர் ஒரு குவாண்டம் கர்னலை உருவாக்கவும்.

from qiskit.circuit.library import ZZFeatureMap
from qiskit_machine_learning.kernels import QuantumKernel

feature_map = ZZFeatureMap(2)
previous_kernel = QuantumKernel(feature_map=feature_map, quantum_instance=sv_qi)

இறுதியாக நாம் ஒரு SVM வகைப்படுத்தியைப் பொருத்துகிறோம்.

from qiskit_machine_learning.algorithms import QSVC

qsvc = QSVC(quantum_kernel=previous_kernel)
qsvc.fit(features, labels)
qsvc.score(features, labels)
0.95

விசை: குவாண்டம் கர்னலின் புதிய செயலாக்கம்#

புதிய செயலாக்கத்தில் நாம் ஒரு ஃபிடிலிட்டி நிகழ்வை உருவாக்குவதிலிருந்து தொடங்குகிறோம். நம்பகத்தன்மை விருப்பமானது மற்றும் எதுவும் அனுப்பப்படாவிட்டால் குவாண்டம் கர்னல் தானாகவே அதை உருவாக்கும். ஆனால் இங்கே, விளக்க நோக்கங்களுக்காக அதை கைமுறையாக உருவாக்குகிறோம். நம்பகத்தன்மை நிகழ்வை உருவாக்க, ஒரு மாதிரியை அனுப்புகிறோம். மாதிரி என்பது குறிப்பு செயல்படுத்தல் மற்றும் எங்கள் குவாண்டம் சுற்றுகள் எங்கு செயல்படுத்தப்படுகின்றன என்பதை வரையறுக்கிறது. Qiskit இயக்க நேர சேவையைப் பயன்படுத்த, QiskitRuntimeService இலிருந்து மாதிரி நிகழ்வை உருவாக்கலாம்.

from qiskit.algorithms.state_fidelities import ComputeUncompute
from qiskit.primitives import Sampler

fidelity = ComputeUncompute(sampler=Sampler())

அடுத்து, நம்பகத்தன்மை நிகழ்வைக் கொண்டு புதிய குவாண்டம் கர்னலை உருவாக்குகிறோம்.

from qiskit_machine_learning.kernels import FidelityQuantumKernel

feature_map = ZZFeatureMap(2)
new_kernel = FidelityQuantumKernel(feature_map=feature_map, fidelity=fidelity)

பின்னர் SVM வகைப்படுத்தியை முன்பு போலவே பொருத்துகிறோம்.

from qiskit_machine_learning.algorithms import QSVC

qsvc = QSVC(quantum_kernel=new_kernel)
qsvc.fit(features, labels)
qsvc.score(features, labels)
0.95

புதிய குவாண்டம் நியூரல் நெட்வொர்க்குகள்#

குவாண்டம் நரம்பியல் நெட்வொர்க்குகளில் ஏற்படும் மாற்றங்கள் குவாண்டம் கர்னல்களைப் போல வியத்தகு முறையில் இல்லை. கூடுதலாக, தற்போதுள்ள நரம்பியல் நெட்வொர்க்குகளுக்கு மாற்றாக, இரண்டு புதிய நெட்வொர்க்குகள் அறிமுகப்படுத்தப்பட்டுள்ளன. அறிமுகப்படுத்தப்பட்ட புதிய நெட்வொர்க்குகள் SamplerQNN மற்றும் EstimatorQNN இவை கீழே விவரிக்கப்பட்டுள்ளன மற்றும் முன்பே இருக்கும் CircuitQNN, OpflowQNN மற்றும் TwoLayerQNN இப்போது நிலுவையில் உள்ளவை நிறுத்தப்பட்டன.

மாதிரிக்யூஎன்என்#

ஒரு புதிய சாம்ப்ளர் குவாண்டம் நியூரல் நெட்வொர்க் மாதிரிப் பழமையான, மாதிரி* *நேரடியான மாற்றீடுகளை மேம்படுத்துகிறது. இன் CircuitQNN.

புதிய SamplerQNN ஏற்கனவே உள்ள CircuitQNN, சில வேறுபாடுகளுடன். ஒன்று quantum_instance அளவுரு. இந்த அளவுருவுக்கு நேரடி மாற்றீடு இல்லை, அதற்கு பதிலாக sampler அளவுரு பயன்படுத்தப்பட வேண்டும். gradient அளவுரு, CircuitQNN இல் உள்ள அதே பெயரை வைத்திருக்கிறது. உள்ளீடுகளாக Opflow சாய்வு வகுப்புகள்; அதற்கு பதிலாக, இந்த அளவுரு ஒரு (விரும்பினால் தனிப்பயன்) பழமையான சாய்வு எதிர்பார்க்கிறது. sampler விருப்பம் தற்போதைக்கு அகற்றப்பட்டது, ஏனெனில் இந்தத் தகவல் தற்போது மாதிரியால் வெளிப்படுத்தப்படவில்லை, மேலும் இது எதிர்கால கீழ்-நிலை ஆதிநிலைகளுக்கு ஒத்ததாக இருக்கலாம்.

விசை: CircuitQNN <https://qiskit ஐ அடிப்படையாகக் கொண்ட `VQC போன்ற தற்போதைய பயிற்சி அல்காரிதம்கள். org/documentation/machine-learning/stubs/qiskit_machine_learning.neural_networks.CircuitQNN.html>`__, இரண்டு செயலாக்கங்களையும் ஏற்க புதுப்பிக்கப்பட்டது. `NeuralNetworkClassifier <https://qiskit.org/documentation/machine-learning/stubs/qiskit_machine_learning.algorithms.NeuralNetworkClassifier.html> செயல்படுத்துதல்

தற்போதுள்ள CircuitQNN இப்போது ** நிலுவையில் உள்ள தேய்மானம்**, எதிர்கால வெளியீட்டில் நீக்கப்படும். அதற்கு பிறகு.

We’ll show how to train a variational quantum classifier using both networks. For this purposes we re-use the dataset generated for the quantum kernel. For both quantum neural networks we still have to construct a feature map, an ansatz and combine them into a single quantum circuit.

from qiskit import QuantumCircuit
from qiskit.circuit.library import RealAmplitudes

num_inputs = 2
feature_map = ZZFeatureMap(num_inputs)
ansatz = RealAmplitudes(num_inputs, reps=1)

circuit = QuantumCircuit(num_inputs)
circuit.compose(feature_map, inplace=True)
circuit.compose(ansatz, inplace=True)

நமக்கு ஒரு விளக்கச் செயல்பாடும் தேவை. பிட்ஸ்ட்ரிங்ஸை \(0\) அல்லது \(1\) என வரைபடமாக்கும் எங்கள் வழக்கமான சமநிலை செயல்பாட்டை நாங்கள் வரையறுக்கிறோம்.:math:

def parity(x):
    return "{:b}".format(x).count("1") % 2

இரண்டு நெட்வொர்க்குகளிலிருந்தும் ஒரே மாதிரியான முடிவுகளைப் பெற ஆரம்பப் புள்ளியைச் சரிசெய்கிறோம்.

initial_point = algorithm_globals.random.random(ansatz.num_parameters)

CircuitQNN ஐப் பயன்படுத்தி வகைப்படுத்தியை உருவாக்குதல்#

``CircuitQNN` நிகழ்வை உருவாக்கி, குவாண்டம் கர்னலுக்காக உருவாக்கப்பட்ட குவாண்டம் நிகழ்வை மீண்டும் பயன்படுத்துகிறோம்.

from qiskit_machine_learning.neural_networks import CircuitQNN

circuit_qnn = CircuitQNN(
    circuit=circuit,
    input_params=feature_map.parameters,
    weight_params=ansatz.parameters,
    interpret=parity,
    output_shape=2,
    quantum_instance=sv_qi,
)

நெட்வொர்க்கிற்கு வெளியே ஒரு வகைப்படுத்தியை உருவாக்கி, அதைப் பயிற்றுவித்து மதிப்பெண் பெறவும். நாங்கள் நல்ல முடிவுகளை இலக்காகக் கொண்டிருக்கவில்லை, எனவே ஒட்டுமொத்த செயலாக்க நேரத்தைக் குறைக்க மறு செய்கைகளின் எண்ணிக்கை சிறிய எண்ணிக்கையில் அமைக்கப்பட்டுள்ளது.

from qiskit.algorithms.optimizers import COBYLA
from qiskit_machine_learning.algorithms import NeuralNetworkClassifier

classifier = NeuralNetworkClassifier(
    neural_network=circuit_qnn,
    loss="cross_entropy",
    one_hot=True,
    optimizer=COBYLA(maxiter=40),
    initial_point=initial_point,
)
classifier.fit(features, labels)
classifier.score(features, labels)
0.6

SamplerQNN ஐப் பயன்படுத்தி வகைப்படுத்தியை உருவாக்குதல்#

QuantumInstance என்பதற்குப் பதிலாக Sampler குறிப்பின் நிகழ்வை உருவாக்கவும்.

from qiskit.primitives import Sampler

sampler = Sampler()

இப்போது, ​​``SamplerQNN`` இன் நிகழ்வை உருவாக்குகிறோம். ``CircuitQNN` உடன் உள்ள வித்தியாசம் என்னவென்றால், குவாண்டம் நிகழ்விற்குப் பதிலாக ஒரு மாதிரியை அனுப்புகிறோம்.

from qiskit_machine_learning.neural_networks import SamplerQNN

sampler_qnn = SamplerQNN(
    circuit=circuit,
    input_params=feature_map.parameters,
    weight_params=ansatz.parameters,
    interpret=parity,
    output_shape=2,
    sampler=sampler,
)

ஒரு வகைப்படுத்தியை உருவாக்கி வழக்கம்போல் பொருத்தவும். neural_network என நாம் உருவாக்கிய SamplerQNN ஐ அனுப்புகிறோம், இதுவே வித்தியாசம்.

classifier = NeuralNetworkClassifier(
    neural_network=sampler_qnn,
    loss="cross_entropy",
    one_hot=True,
    optimizer=COBYLA(maxiter=40),
    initial_point=initial_point,
)
classifier.fit(features, labels)
classifier.score(features, labels)
0.6

குவாண்டம் நியூரல் நெட்வொர்க்கை கைமுறையாக உருவாக்குவதற்குப் பதிலாக, நீங்கள் VQC``க்கு பயிற்சி அளிக்கலாம். இது ஒரு குவாண்டம் நிகழ்வு அல்லது மாதிரியை எடுக்கும், அனுப்பப்பட்டதைப் பொறுத்து அது தானாகவே முறையே ``CircuitQNN` அல்லது ``SamplerQNN ஐ உருவாக்குகிறது.

விசை: EstimatorQNN#

ஒரு புதிய எஸ்டிமேட்டர் குவாண்டம் நரம்பியல் நெட்வொர்க் மதிப்பீட்டாளர் ஆதிகாலம், மதிப்பீட்டாளர்* கிரிமிட்டிவ் * டைரக்ட் ஆடி* ரிப்லேஸ்டு இன் OpflowQNN.

புதிய EstimatorQNN ஏற்கனவே உள்ள OpflowQNN, சில வேறுபாடுகளுடன். ஒன்று குவாண்டம்_இன்ஸ்டன்ஸ் அளவுரு. இந்த அளவுருவுக்கு நேரடி மாற்றீடு இல்லை, அதற்குப் பதிலாக மதிப்பீட்டாளர் அளவுரு பயன்படுத்தப்பட வேண்டும். gradient அளவுரு, OpflowQNN செயல்படுத்தலில் உள்ள அதே பெயரை வைத்திருக்கிறது, ஆனால் அது இனி ஏற்கப்படாது. உள்ளீடுகளாக Opflow சாய்வு வகுப்புகள்; அதற்கு பதிலாக, இந்த அளவுரு ஒரு (விரும்பினால் தனிப்பயன்) பழமையான சாய்வு எதிர்பார்க்கிறது.

விசை: TwoLayerQNN <https://qiskit ஐ அடிப்படையாகக் கொண்ட `VQR போன்ற தற்போதைய பயிற்சி அல்காரிதம்கள் .org/documentation/machine-learning/stubs/qiskit_machine_learning.neural_networks.TwoLayerQNN.html>`__, இரண்டு செயலாக்கங்களையும் ஏற்க புதுப்பிக்கப்பட்டது. `NeuralNetworkRegressor.h ஐச் செயல்படுத்துதல்

தற்போதுள்ள OpflowQNN இப்போது ** நிலுவையில் உள்ள தேய்மானம்**, எதிர்கால வெளியீட்டில் நீக்கப்படும். அதற்கு பிறகு.

We’ll show how to train a variational quantum regressor using both networks. We start from generating a simple regression dataset.

import numpy as np

num_samples = 20
eps = 0.2
lb, ub = -np.pi, np.pi
features = (ub - lb) * np.random.rand(num_samples, 1) + lb
labels = np.sin(features[:, 0]) + eps * (2 * np.random.rand(num_samples) - 1)

நாம் இன்னும் ஒரு அம்ச வரைபடத்தை உருவாக்க வேண்டும், ஒரு ansatz மற்றும் இரண்டு குவாண்டம் நரம்பியல் நெட்வொர்க்குகளுக்கும் அவற்றை ஒரு குவாண்டம் சர்க்யூட்டில் இணைக்க வேண்டும்.

from qiskit.circuit import Parameter

num_inputs = 1
feature_map = QuantumCircuit(1)
feature_map.ry(Parameter("input"), 0)

ansatz = QuantumCircuit(1)
ansatz.ry(Parameter("weight"), 0)

circuit = QuantumCircuit(num_inputs)
circuit.compose(feature_map, inplace=True)
circuit.compose(ansatz, inplace=True)

இரண்டு நெட்வொர்க்குகளிலிருந்தும் ஒரே மாதிரியான முடிவுகளைப் பெற ஆரம்பப் புள்ளியைச் சரிசெய்கிறோம்.

initial_point = algorithm_globals.random.random(ansatz.num_parameters)

OpflowQNN ஐப் பயன்படுத்தி ஒரு பின்னடைவை உருவாக்குதல்#

நாங்கள் ``OpflowQNN` நிகழ்வை உருவாக்கி, குவாண்டம் கர்னலுக்காக உருவாக்கப்பட்ட குவாண்டம் நிகழ்வை மீண்டும் பயன்படுத்துகிறோம்.

from qiskit.opflow import PauliSumOp, StateFn
from qiskit_machine_learning.neural_networks import OpflowQNN

observable = PauliSumOp.from_list([("Z", 1)])
operator = StateFn(observable, is_measurement=True) @ StateFn(circuit)

opflow_qnn = OpflowQNN(
    operator=operator,
    input_params=feature_map.parameters,
    weight_params=ansatz.parameters,
    quantum_instance=sv_qi,
)

நெட்வொர்க்கிற்கு வெளியே ஒரு பின்னடைவை உருவாக்கி, அதற்குப் பயிற்சி அளித்து மதிப்பெண் பெறவும். இந்த விஷயத்தில் நாம் சாய்வு அடிப்படையிலான உகப்பாக்கியைப் பயன்படுத்துகிறோம், இதனால் நெட்வொர்க் சாய்வு கட்டமைப்பைப் பயன்படுத்துகிறது மற்றும் தரவுத்தொகுப்பின் தன்மை காரணமாக மிக விரைவாக ஒன்றிணைகிறது.

from qiskit.algorithms.optimizers import L_BFGS_B
from qiskit_machine_learning.algorithms import NeuralNetworkRegressor

regressor = NeuralNetworkRegressor(
    neural_network=opflow_qnn,
    optimizer=L_BFGS_B(maxiter=5),
    initial_point=initial_point,
)
regressor.fit(features, labels)
regressor.score(features, labels)
0.9681198723451012

EstimatorQNN ஐப் பயன்படுத்தி ஒரு பின்னடைவை உருவாக்குதல்#

குறிப்பு மதிப்பீட்டாளரின் உதாரணத்தை உருவாக்கவும். Qiskit இயக்க நேரத்தை மேம்படுத்த, QiskitRuntimeService இலிருந்து ஒரு மதிப்பீட்டாளர் நிகழ்வை நீங்கள் உருவாக்கலாம்.

from qiskit.primitives import Estimator

estimator = Estimator()

இப்போது, ​​``EstimatorQNN`` இன் நிகழ்வை உருவாக்குகிறோம். பிணையம் \(Z^{\otimes n}\) எனக் கவனிக்கக்கூடிய ஒன்றை உருவாக்குகிறது, இதில் \(n\) என்பது qubit இன் எண்ணிக்கை, அது குறிப்பிடப்படவில்லை என்றால்.

from qiskit_machine_learning.neural_networks import EstimatorQNN

estimator_qnn = EstimatorQNN(
    circuit=circuit,
    input_params=feature_map.parameters,
    weight_params=ansatz.parameters,
    estimator=estimator,
)

ஒரு மாறுபாடு குவாண்டம் ரிக்ரஸரை உருவாக்கி அதை பொருத்தவும். இந்தச் சந்தர்ப்பத்தில், கிரேடியன்ட் அடிப்படையிலான உகப்பாக்கியைப் பயன்படுத்துகிறோம், இதனால் நெட்வொர்க் தானாகவே உருவாக்கப்படும் இயல்புநிலை மதிப்பீட்டாளர் சாய்வு ஐப் பயன்படுத்துகிறது.

from qiskit.algorithms.optimizers import L_BFGS_B
from qiskit_machine_learning.algorithms import VQR

regressor = NeuralNetworkRegressor(
    neural_network=estimator_qnn,
    optimizer=L_BFGS_B(maxiter=5),
    initial_point=initial_point,
)
regressor.fit(features, labels)
regressor.score(features, labels)
0.9681198723451012

குவாண்டம் நியூரல் நெட்வொர்க்கை கைமுறையாக உருவாக்குவதற்குப் பதிலாக, நீங்கள் VQR``க்கு பயிற்சி அளிக்கலாம். இது ஒரு குவாண்டம் நிகழ்வு அல்லது மதிப்பீட்டை எடுக்கும், அனுப்பப்பட்டதைப் பொறுத்து அது தானாகவே முறையே ``TwoLayerQNN` அல்லது ``EstimatorQNN ஐ உருவாக்குகிறது.

மற்ற குறிப்பிடத் தக்க நிராகரிப்பு#

மேலே வெளிப்படையாகக் குறிப்பிடப்படாத வேறுசில கூறுகளும் நிராகரிக்கப்பட்டுள்ளன அல்லது தேய்மானம் நிலுவையில் உள்ளன:

  • TwoLayerQNN தேக்கம் நிலுவையில் உள்ளது. பயனர்கள் அதற்குப் பதிலாக EstimatorQNN ஐப் பயன்படுத்த வேண்டும்.

  • Distribution Learners தொகுப்பு முழுமையாக நிராகரிக்கப்பட்டது. இந்தப் பேக்கேஜில் DiscriminativeNetwork, GenerativeNetwork, NumPyDiscriminator, PyTorchDiscriminator, QuantumGenerator, QGAN. அதற்கு பதிலாக, தயவுசெய்து புதிய QGAN டுடோரியலைப் பார்க்கவும். குவாண்டம் நியூரல் நெட்வொர்க்குகளைப் பயன்படுத்தி பைடார்ச் அடிப்படையிலான QGAN ஐ எவ்வாறு உருவாக்குவது என்பதை இந்தப் பயிற்சி படிப்படியாக அறிமுகப்படுத்துகிறது.

  • இயக்க நேர தொகுப்பு நிறுத்தப்பட்டது. அல்காரிதம் இடைமுகங்களில் Qiskit இயக்க நேரத்தை உட்பொதித்து, கிளவுட்டில் அல்காரிதம்கள் மற்றும் ஸ்கிரிப்ட்களைப் பயன்படுத்துவதற்கு வசதியாக இருக்கும் Qiskit நிரல்களுக்கான கிளையண்ட் இந்த தொகுப்பில் உள்ளது. ஆரம்பநிலைகள் மற்றும் இயக்க நேரங்களைப் பயன்படுத்த, நீங்கள் QiskitRuntimeService ஐப் பயன்படுத்த வேண்டும்.

import qiskit.tools.jupyter

%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
qiskit-terra0.25.0
qiskit-aer0.13.0
qiskit-machine-learning0.7.0
System information
Python version3.8.13
Python compilerClang 12.0.0
Python builddefault, Oct 19 2022 17:54:22
OSDarwin
CPUs10
Memory (Gb)64.0
Thu Sep 14 13:57:31 2023 IST

This code is a part of Qiskit

© Copyright IBM 2017, 2023.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.