File size: 1,501 Bytes
1a0d68d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)
@qml.qnode(dev, interface="torch") # 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)