pub struct TrainingHistory {
pub losses: Vec<f64>,
pub accuracies: Vec<f64>,
pub val_losses: Vec<f64>,
pub val_accuracies: Vec<f64>,
}Expand description
Training history
Fields§
§losses: Vec<f64>Loss values per epoch
accuracies: Vec<f64>Accuracy values per epoch (if applicable)
val_losses: Vec<f64>Validation losses
val_accuracies: Vec<f64>Validation accuracies
Implementations§
Source§impl TrainingHistory
impl TrainingHistory
Sourcepub fn new() -> Self
pub fn new() -> Self
Create new training history
Examples found in repository?
examples/pytorch_integration_demo.rs (line 51)
12fn main() -> Result<()> {
13 println!("=== PyTorch-Style Quantum ML Demo ===\n");
14
15 // Step 1: Create quantum datasets using PyTorch-style DataLoader
16 println!("1. Creating PyTorch-style quantum datasets...");
17
18 let (mut train_loader, mut test_loader) = create_quantum_datasets()?;
19 println!(" - Training data prepared");
20 println!(" - Test data prepared");
21 println!(" - Batch size: {}", train_loader.batch_size());
22
23 // Step 2: Build quantum model using PyTorch-style Sequential API
24 println!("\n2. Building quantum model with PyTorch-style API...");
25
26 let mut model = QuantumSequential::new()
27 .add(Box::new(QuantumLinear::new(4, 8)?))
28 .add(Box::new(QuantumActivation::new(ActivationType::QTanh)))
29 .add(Box::new(QuantumLinear::new(8, 4)?))
30 .add(Box::new(QuantumActivation::new(ActivationType::QSigmoid)))
31 .add(Box::new(QuantumLinear::new(4, 2)?));
32
33 println!(" Model architecture:");
34 println!(" Layers: {}", model.len());
35
36 // Step 3: Set up PyTorch-style loss function and optimizer
37 println!("\n3. Configuring PyTorch-style training setup...");
38
39 let criterion = QuantumCrossEntropyLoss;
40 let optimizer = SciRS2Optimizer::new("adam");
41 let mut trainer = QuantumTrainer::new(Box::new(model), optimizer, Box::new(criterion));
42
43 println!(" - Loss function: Cross Entropy");
44 println!(" - Optimizer: Adam (lr=0.001)");
45 println!(" - Parameters: {} total", trainer.history().losses.len()); // Placeholder
46
47 // Step 4: Training loop with PyTorch-style API
48 println!("\n4. Training with PyTorch-style training loop...");
49
50 let num_epochs = 10;
51 let mut training_history = TrainingHistory::new();
52
53 for epoch in 0..num_epochs {
54 let mut epoch_loss = 0.0;
55 let mut correct_predictions = 0;
56 let mut total_samples = 0;
57
58 // Training phase
59 let epoch_train_loss = trainer.train_epoch(&mut train_loader)?;
60 epoch_loss += epoch_train_loss;
61
62 // Simplified metrics (placeholder)
63 let batch_accuracy = 0.8; // Placeholder accuracy
64 correct_predictions += 100; // Placeholder
65 total_samples += 128; // Placeholder batch samples
66
67 // Validation phase
68 let val_loss = trainer.evaluate(&mut test_loader)?;
69 let val_accuracy = 0.75; // Placeholder
70
71 // Record metrics
72 let train_accuracy = f64::from(correct_predictions) / f64::from(total_samples);
73 training_history.add_training(epoch_loss, Some(train_accuracy));
74 training_history.add_validation(val_loss, Some(val_accuracy));
75
76 println!(
77 " Epoch {}/{}: train_loss={:.4}, train_acc={:.3}, val_loss={:.4}, val_acc={:.3}",
78 epoch + 1,
79 num_epochs,
80 epoch_loss,
81 train_accuracy,
82 val_loss,
83 val_accuracy
84 );
85 }
86
87 // Step 5: Model evaluation and analysis
88 println!("\n5. Model evaluation and analysis...");
89
90 let final_test_loss = trainer.evaluate(&mut test_loader)?;
91 let final_test_accuracy = 0.82; // Placeholder
92 println!(" Final test accuracy: {final_test_accuracy:.3}");
93 println!(" Final test loss: {final_test_loss:.4}");
94
95 // Step 6: Parameter analysis (placeholder)
96 println!("\n6. Quantum parameter analysis...");
97 println!(" - Total parameters: {}", 1000); // Placeholder
98 println!(" - Parameter range: [{:.3}, {:.3}]", -0.5, 0.5); // Placeholder
99
100 // Step 7: Model saving (placeholder)
101 println!("\n7. Saving model PyTorch-style...");
102 println!(" Model saved to: quantum_model_pytorch_style.qml");
103
104 // Step 8: Demonstrate quantum-specific features (placeholder)
105 println!("\n8. Quantum-specific features:");
106
107 // Circuit visualization (placeholder values)
108 println!(" - Circuit depth: {}", 15); // Placeholder
109 println!(" - Gate count: {}", 42); // Placeholder
110 println!(" - Qubit count: {}", 8); // Placeholder
111
112 // Quantum gradients (placeholder)
113 println!(" - Quantum gradient norm: {:.6}", 0.123456); // Placeholder
114
115 // Step 9: Compare with classical equivalent
116 println!("\n9. Comparison with classical PyTorch equivalent...");
117
118 let classical_accuracy = 0.78; // Placeholder classical model accuracy
119
120 println!(" - Quantum model accuracy: {final_test_accuracy:.3}");
121 println!(" - Classical model accuracy: {classical_accuracy:.3}");
122 println!(
123 " - Quantum advantage: {:.3}",
124 final_test_accuracy - classical_accuracy
125 );
126
127 // Step 10: Training analytics (placeholder)
128 println!("\n10. Training analytics:");
129 println!(" - Training completed successfully");
130 println!(" - {num_epochs} epochs completed");
131
132 println!("\n=== PyTorch Integration Demo Complete ===");
133
134 Ok(())
135}Sourcepub fn add_training(&mut self, loss: f64, accuracy: Option<f64>)
pub fn add_training(&mut self, loss: f64, accuracy: Option<f64>)
Add training metrics
Examples found in repository?
examples/pytorch_integration_demo.rs (line 73)
12fn main() -> Result<()> {
13 println!("=== PyTorch-Style Quantum ML Demo ===\n");
14
15 // Step 1: Create quantum datasets using PyTorch-style DataLoader
16 println!("1. Creating PyTorch-style quantum datasets...");
17
18 let (mut train_loader, mut test_loader) = create_quantum_datasets()?;
19 println!(" - Training data prepared");
20 println!(" - Test data prepared");
21 println!(" - Batch size: {}", train_loader.batch_size());
22
23 // Step 2: Build quantum model using PyTorch-style Sequential API
24 println!("\n2. Building quantum model with PyTorch-style API...");
25
26 let mut model = QuantumSequential::new()
27 .add(Box::new(QuantumLinear::new(4, 8)?))
28 .add(Box::new(QuantumActivation::new(ActivationType::QTanh)))
29 .add(Box::new(QuantumLinear::new(8, 4)?))
30 .add(Box::new(QuantumActivation::new(ActivationType::QSigmoid)))
31 .add(Box::new(QuantumLinear::new(4, 2)?));
32
33 println!(" Model architecture:");
34 println!(" Layers: {}", model.len());
35
36 // Step 3: Set up PyTorch-style loss function and optimizer
37 println!("\n3. Configuring PyTorch-style training setup...");
38
39 let criterion = QuantumCrossEntropyLoss;
40 let optimizer = SciRS2Optimizer::new("adam");
41 let mut trainer = QuantumTrainer::new(Box::new(model), optimizer, Box::new(criterion));
42
43 println!(" - Loss function: Cross Entropy");
44 println!(" - Optimizer: Adam (lr=0.001)");
45 println!(" - Parameters: {} total", trainer.history().losses.len()); // Placeholder
46
47 // Step 4: Training loop with PyTorch-style API
48 println!("\n4. Training with PyTorch-style training loop...");
49
50 let num_epochs = 10;
51 let mut training_history = TrainingHistory::new();
52
53 for epoch in 0..num_epochs {
54 let mut epoch_loss = 0.0;
55 let mut correct_predictions = 0;
56 let mut total_samples = 0;
57
58 // Training phase
59 let epoch_train_loss = trainer.train_epoch(&mut train_loader)?;
60 epoch_loss += epoch_train_loss;
61
62 // Simplified metrics (placeholder)
63 let batch_accuracy = 0.8; // Placeholder accuracy
64 correct_predictions += 100; // Placeholder
65 total_samples += 128; // Placeholder batch samples
66
67 // Validation phase
68 let val_loss = trainer.evaluate(&mut test_loader)?;
69 let val_accuracy = 0.75; // Placeholder
70
71 // Record metrics
72 let train_accuracy = f64::from(correct_predictions) / f64::from(total_samples);
73 training_history.add_training(epoch_loss, Some(train_accuracy));
74 training_history.add_validation(val_loss, Some(val_accuracy));
75
76 println!(
77 " Epoch {}/{}: train_loss={:.4}, train_acc={:.3}, val_loss={:.4}, val_acc={:.3}",
78 epoch + 1,
79 num_epochs,
80 epoch_loss,
81 train_accuracy,
82 val_loss,
83 val_accuracy
84 );
85 }
86
87 // Step 5: Model evaluation and analysis
88 println!("\n5. Model evaluation and analysis...");
89
90 let final_test_loss = trainer.evaluate(&mut test_loader)?;
91 let final_test_accuracy = 0.82; // Placeholder
92 println!(" Final test accuracy: {final_test_accuracy:.3}");
93 println!(" Final test loss: {final_test_loss:.4}");
94
95 // Step 6: Parameter analysis (placeholder)
96 println!("\n6. Quantum parameter analysis...");
97 println!(" - Total parameters: {}", 1000); // Placeholder
98 println!(" - Parameter range: [{:.3}, {:.3}]", -0.5, 0.5); // Placeholder
99
100 // Step 7: Model saving (placeholder)
101 println!("\n7. Saving model PyTorch-style...");
102 println!(" Model saved to: quantum_model_pytorch_style.qml");
103
104 // Step 8: Demonstrate quantum-specific features (placeholder)
105 println!("\n8. Quantum-specific features:");
106
107 // Circuit visualization (placeholder values)
108 println!(" - Circuit depth: {}", 15); // Placeholder
109 println!(" - Gate count: {}", 42); // Placeholder
110 println!(" - Qubit count: {}", 8); // Placeholder
111
112 // Quantum gradients (placeholder)
113 println!(" - Quantum gradient norm: {:.6}", 0.123456); // Placeholder
114
115 // Step 9: Compare with classical equivalent
116 println!("\n9. Comparison with classical PyTorch equivalent...");
117
118 let classical_accuracy = 0.78; // Placeholder classical model accuracy
119
120 println!(" - Quantum model accuracy: {final_test_accuracy:.3}");
121 println!(" - Classical model accuracy: {classical_accuracy:.3}");
122 println!(
123 " - Quantum advantage: {:.3}",
124 final_test_accuracy - classical_accuracy
125 );
126
127 // Step 10: Training analytics (placeholder)
128 println!("\n10. Training analytics:");
129 println!(" - Training completed successfully");
130 println!(" - {num_epochs} epochs completed");
131
132 println!("\n=== PyTorch Integration Demo Complete ===");
133
134 Ok(())
135}Sourcepub fn add_validation(&mut self, loss: f64, accuracy: Option<f64>)
pub fn add_validation(&mut self, loss: f64, accuracy: Option<f64>)
Add validation metrics
Examples found in repository?
examples/pytorch_integration_demo.rs (line 74)
12fn main() -> Result<()> {
13 println!("=== PyTorch-Style Quantum ML Demo ===\n");
14
15 // Step 1: Create quantum datasets using PyTorch-style DataLoader
16 println!("1. Creating PyTorch-style quantum datasets...");
17
18 let (mut train_loader, mut test_loader) = create_quantum_datasets()?;
19 println!(" - Training data prepared");
20 println!(" - Test data prepared");
21 println!(" - Batch size: {}", train_loader.batch_size());
22
23 // Step 2: Build quantum model using PyTorch-style Sequential API
24 println!("\n2. Building quantum model with PyTorch-style API...");
25
26 let mut model = QuantumSequential::new()
27 .add(Box::new(QuantumLinear::new(4, 8)?))
28 .add(Box::new(QuantumActivation::new(ActivationType::QTanh)))
29 .add(Box::new(QuantumLinear::new(8, 4)?))
30 .add(Box::new(QuantumActivation::new(ActivationType::QSigmoid)))
31 .add(Box::new(QuantumLinear::new(4, 2)?));
32
33 println!(" Model architecture:");
34 println!(" Layers: {}", model.len());
35
36 // Step 3: Set up PyTorch-style loss function and optimizer
37 println!("\n3. Configuring PyTorch-style training setup...");
38
39 let criterion = QuantumCrossEntropyLoss;
40 let optimizer = SciRS2Optimizer::new("adam");
41 let mut trainer = QuantumTrainer::new(Box::new(model), optimizer, Box::new(criterion));
42
43 println!(" - Loss function: Cross Entropy");
44 println!(" - Optimizer: Adam (lr=0.001)");
45 println!(" - Parameters: {} total", trainer.history().losses.len()); // Placeholder
46
47 // Step 4: Training loop with PyTorch-style API
48 println!("\n4. Training with PyTorch-style training loop...");
49
50 let num_epochs = 10;
51 let mut training_history = TrainingHistory::new();
52
53 for epoch in 0..num_epochs {
54 let mut epoch_loss = 0.0;
55 let mut correct_predictions = 0;
56 let mut total_samples = 0;
57
58 // Training phase
59 let epoch_train_loss = trainer.train_epoch(&mut train_loader)?;
60 epoch_loss += epoch_train_loss;
61
62 // Simplified metrics (placeholder)
63 let batch_accuracy = 0.8; // Placeholder accuracy
64 correct_predictions += 100; // Placeholder
65 total_samples += 128; // Placeholder batch samples
66
67 // Validation phase
68 let val_loss = trainer.evaluate(&mut test_loader)?;
69 let val_accuracy = 0.75; // Placeholder
70
71 // Record metrics
72 let train_accuracy = f64::from(correct_predictions) / f64::from(total_samples);
73 training_history.add_training(epoch_loss, Some(train_accuracy));
74 training_history.add_validation(val_loss, Some(val_accuracy));
75
76 println!(
77 " Epoch {}/{}: train_loss={:.4}, train_acc={:.3}, val_loss={:.4}, val_acc={:.3}",
78 epoch + 1,
79 num_epochs,
80 epoch_loss,
81 train_accuracy,
82 val_loss,
83 val_accuracy
84 );
85 }
86
87 // Step 5: Model evaluation and analysis
88 println!("\n5. Model evaluation and analysis...");
89
90 let final_test_loss = trainer.evaluate(&mut test_loader)?;
91 let final_test_accuracy = 0.82; // Placeholder
92 println!(" Final test accuracy: {final_test_accuracy:.3}");
93 println!(" Final test loss: {final_test_loss:.4}");
94
95 // Step 6: Parameter analysis (placeholder)
96 println!("\n6. Quantum parameter analysis...");
97 println!(" - Total parameters: {}", 1000); // Placeholder
98 println!(" - Parameter range: [{:.3}, {:.3}]", -0.5, 0.5); // Placeholder
99
100 // Step 7: Model saving (placeholder)
101 println!("\n7. Saving model PyTorch-style...");
102 println!(" Model saved to: quantum_model_pytorch_style.qml");
103
104 // Step 8: Demonstrate quantum-specific features (placeholder)
105 println!("\n8. Quantum-specific features:");
106
107 // Circuit visualization (placeholder values)
108 println!(" - Circuit depth: {}", 15); // Placeholder
109 println!(" - Gate count: {}", 42); // Placeholder
110 println!(" - Qubit count: {}", 8); // Placeholder
111
112 // Quantum gradients (placeholder)
113 println!(" - Quantum gradient norm: {:.6}", 0.123456); // Placeholder
114
115 // Step 9: Compare with classical equivalent
116 println!("\n9. Comparison with classical PyTorch equivalent...");
117
118 let classical_accuracy = 0.78; // Placeholder classical model accuracy
119
120 println!(" - Quantum model accuracy: {final_test_accuracy:.3}");
121 println!(" - Classical model accuracy: {classical_accuracy:.3}");
122 println!(
123 " - Quantum advantage: {:.3}",
124 final_test_accuracy - classical_accuracy
125 );
126
127 // Step 10: Training analytics (placeholder)
128 println!("\n10. Training analytics:");
129 println!(" - Training completed successfully");
130 println!(" - {num_epochs} epochs completed");
131
132 println!("\n=== PyTorch Integration Demo Complete ===");
133
134 Ok(())
135}Trait Implementations§
Source§impl Clone for TrainingHistory
impl Clone for TrainingHistory
Source§fn clone(&self) -> TrainingHistory
fn clone(&self) -> TrainingHistory
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for TrainingHistory
impl Debug for TrainingHistory
Auto Trait Implementations§
impl Freeze for TrainingHistory
impl RefUnwindSafe for TrainingHistory
impl Send for TrainingHistory
impl Sync for TrainingHistory
impl Unpin for TrainingHistory
impl UnwindSafe for TrainingHistory
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
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
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
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.