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 58)
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}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 80)
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}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 81)
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}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.