| import pennylane as qml | |
| import torch | |
| import torch.nn as nn | |
| # --- KUANTUM DEVRESİ AYARLARI --- | |
| n_qubits = 4 # 4 Qubit kullanacağız | |
| n_layers = 2 # Derinlik (Karmaşıklık) | |
| dev = qml.device("default.qubit", wires=n_qubits) # Simülatör | |
| # Kuantum Devresi Tanımı (QNode) | |
| # PyTorch ile konuşabilmesi için | |
| def quantum_circuit(inputs, weights): | |
| # 1. Veriyi Qubitlere Yükle (Embedding) | |
| # Lidar verisini açılara dönüştürüp qubitleri döndürüyoruz | |
| qml.templates.AngleEmbedding(inputs, wires=range(n_qubits)) | |
| # 2. İşlem Katmanı (Weights) | |
| # Yapay Zeka bu ağırlıkları (açıları) öğrenecek | |
| qml.templates.StronglyEntanglingLayers(weights, wires=range(n_qubits)) | |
| # 3. Ölçüm (Measurement) | |
| # Pauli-Z ekseninde ölçüm yapıp klasik sayıya çeviriyoruz | |
| return [qml.expval(qml.PauliZ(wires=i)) for i in range(n_qubits)] | |
| # --- HİBRİT KATMAN (PyTorch Modülü) --- | |
| class HybridQuantumLayer(nn.Module): | |
| def __init__(self): | |
| super().__init__() | |
| # Ağırlıkların şekli: (Katman Sayısı, Qubit Sayısı, 3) | |
| weight_shapes = {"weights": (n_layers, n_qubits, 3)} | |
| # PennyLane devresini PyTorch katmanına çeviriyoruz | |
| self.q_layer = qml.qnn.TorchLayer(quantum_circuit, weight_shapes) | |
| def forward(self, x): | |
| # x: Klasik veri | |
| # Çıktı: Kuantum işleminden geçmiş veri | |
| return self.q_layer(x) |