QuantumActivation

Struct QuantumActivation 

Source
pub struct QuantumActivation { /* private fields */ }
Expand description

Quantum activation functions

Implementations§

Source§

impl QuantumActivation

Source

pub fn new(activation_type: ActivationType) -> Self

Create new activation layer

Examples found in repository?
examples/pytorch_integration_demo.rs (line 35)
19fn main() -> Result<()> {
20    println!("=== PyTorch-Style Quantum ML Demo ===\n");
21
22    // Step 1: Create quantum datasets using PyTorch-style DataLoader
23    println!("1. Creating PyTorch-style quantum datasets...");
24
25    let (mut train_loader, mut test_loader) = create_quantum_datasets()?;
26    println!("   - Training data prepared");
27    println!("   - Test data prepared");
28    println!("   - Batch size: {}", train_loader.batch_size());
29
30    // Step 2: Build quantum model using PyTorch-style Sequential API
31    println!("\n2. Building quantum model with PyTorch-style API...");
32
33    let mut model = QuantumSequential::new()
34        .add(Box::new(QuantumLinear::new(4, 8)?))
35        .add(Box::new(QuantumActivation::new(ActivationType::QTanh)))
36        .add(Box::new(QuantumLinear::new(8, 4)?))
37        .add(Box::new(QuantumActivation::new(ActivationType::QSigmoid)))
38        .add(Box::new(QuantumLinear::new(4, 2)?));
39
40    println!("   Model architecture:");
41    println!("   Layers: {}", model.len());
42
43    // Step 3: Set up PyTorch-style loss function and optimizer
44    println!("\n3. Configuring PyTorch-style training setup...");
45
46    let criterion = QuantumCrossEntropyLoss;
47    let optimizer = SciRS2Optimizer::new("adam");
48    let mut trainer = QuantumTrainer::new(Box::new(model), optimizer, Box::new(criterion));
49
50    println!("   - Loss function: Cross Entropy");
51    println!("   - Optimizer: Adam (lr=0.001)");
52    println!("   - Parameters: {} total", trainer.history().losses.len()); // Placeholder
53
54    // Step 4: Training loop with PyTorch-style API
55    println!("\n4. Training with PyTorch-style training loop...");
56
57    let num_epochs = 10;
58    let mut training_history = TrainingHistory::new();
59
60    for epoch in 0..num_epochs {
61        let mut epoch_loss = 0.0;
62        let mut correct_predictions = 0;
63        let mut total_samples = 0;
64
65        // Training phase
66        let epoch_train_loss = trainer.train_epoch(&mut train_loader)?;
67        epoch_loss += epoch_train_loss;
68
69        // Simplified metrics (placeholder)
70        let batch_accuracy = 0.8; // Placeholder accuracy
71        correct_predictions += 100; // Placeholder
72        total_samples += 128; // Placeholder batch samples
73
74        // Validation phase
75        let val_loss = trainer.evaluate(&mut test_loader)?;
76        let val_accuracy = 0.75; // Placeholder
77
78        // Record metrics
79        let train_accuracy = f64::from(correct_predictions) / f64::from(total_samples);
80        training_history.add_training(epoch_loss, Some(train_accuracy));
81        training_history.add_validation(val_loss, Some(val_accuracy));
82
83        println!(
84            "   Epoch {}/{}: train_loss={:.4}, train_acc={:.3}, val_loss={:.4}, val_acc={:.3}",
85            epoch + 1,
86            num_epochs,
87            epoch_loss,
88            train_accuracy,
89            val_loss,
90            val_accuracy
91        );
92    }
93
94    // Step 5: Model evaluation and analysis
95    println!("\n5. Model evaluation and analysis...");
96
97    let final_test_loss = trainer.evaluate(&mut test_loader)?;
98    let final_test_accuracy = 0.82; // Placeholder
99    println!("   Final test accuracy: {final_test_accuracy:.3}");
100    println!("   Final test loss: {final_test_loss:.4}");
101
102    // Step 6: Parameter analysis (placeholder)
103    println!("\n6. Quantum parameter analysis...");
104    println!("   - Total parameters: {}", 1000); // Placeholder
105    println!("   - Parameter range: [{:.3}, {:.3}]", -0.5, 0.5); // Placeholder
106
107    // Step 7: Model saving (placeholder)
108    println!("\n7. Saving model PyTorch-style...");
109    println!("   Model saved to: quantum_model_pytorch_style.qml");
110
111    // Step 8: Demonstrate quantum-specific features (placeholder)
112    println!("\n8. Quantum-specific features:");
113
114    // Circuit visualization (placeholder values)
115    println!("   - Circuit depth: {}", 15); // Placeholder
116    println!("   - Gate count: {}", 42); // Placeholder
117    println!("   - Qubit count: {}", 8); // Placeholder
118
119    // Quantum gradients (placeholder)
120    println!("   - Quantum gradient norm: {:.6}", 0.123456); // Placeholder
121
122    // Step 9: Compare with classical equivalent
123    println!("\n9. Comparison with classical PyTorch equivalent...");
124
125    let classical_accuracy = 0.78; // Placeholder classical model accuracy
126
127    println!("   - Quantum model accuracy: {final_test_accuracy:.3}");
128    println!("   - Classical model accuracy: {classical_accuracy:.3}");
129    println!(
130        "   - Quantum advantage: {:.3}",
131        final_test_accuracy - classical_accuracy
132    );
133
134    // Step 10: Training analytics (placeholder)
135    println!("\n10. Training analytics:");
136    println!("   - Training completed successfully");
137    println!("   - {num_epochs} epochs completed");
138
139    println!("\n=== PyTorch Integration Demo Complete ===");
140
141    Ok(())
142}
Source

pub fn relu() -> Self

Create ReLU activation

Source

pub fn sigmoid() -> Self

Create Sigmoid activation

Source

pub fn tanh() -> Self

Create Tanh activation

Source

pub fn softmax() -> Self

Create Softmax activation

Trait Implementations§

Source§

impl QuantumModule for QuantumActivation

Source§

fn forward(&mut self, input: &SciRS2Array) -> Result<SciRS2Array>

Forward pass
Source§

fn parameters(&self) -> Vec<Parameter>

Get all parameters
Source§

fn train(&mut self, mode: bool)

Set training mode
Source§

fn training(&self) -> bool

Check if module is in training mode
Source§

fn zero_grad(&mut self)

Zero gradients of all parameters
Source§

fn name(&self) -> &str

Module name for debugging

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V