pub struct FewShotLearner { /* private fields */ }Expand description
Few-shot learning manager
Implementations§
Source§impl FewShotLearner
impl FewShotLearner
Sourcepub fn new(method: FewShotMethod, model: QuantumNeuralNetwork) -> Self
pub fn new(method: FewShotMethod, model: QuantumNeuralNetwork) -> Self
Create a new few-shot learner
Examples found in repository?
examples/few_shot_learning.rs (line 98)
93fn test_prototypical_networks(
94 data: &Array2<f64>,
95 labels: &Array1<usize>,
96 qnn: QuantumNeuralNetwork,
97) -> Result<()> {
98 let mut learner = FewShotLearner::new(FewShotMethod::PrototypicalNetworks, qnn);
99
100 // Generate episodes for training
101 let num_episodes = 10;
102 let mut episodes = Vec::new();
103
104 for _ in 0..num_episodes {
105 let episode = FewShotLearner::generate_episode(
106 data, labels, 5, // 5-way
107 3, // 3-shot
108 5, // 5 query examples per class
109 )?;
110 episodes.push(episode);
111 }
112
113 // Train
114 let mut optimizer = Adam::new(0.01);
115 let accuracies = learner.train(&episodes, &mut optimizer, 20)?;
116
117 // Print results
118 println!(" Training completed:");
119 println!(" - Initial accuracy: {:.2}%", accuracies[0] * 100.0);
120 println!(
121 " - Final accuracy: {:.2}%",
122 accuracies.last().unwrap() * 100.0
123 );
124 println!(
125 " - Improvement: {:.2}%",
126 (accuracies.last().unwrap() - accuracies[0]) * 100.0
127 );
128
129 Ok(())
130}
131
132/// Test MAML
133fn test_maml(data: &Array2<f64>, labels: &Array1<usize>, qnn: QuantumNeuralNetwork) -> Result<()> {
134 let mut learner = FewShotLearner::new(
135 FewShotMethod::MAML {
136 inner_steps: 5,
137 inner_lr: 0.01,
138 },
139 qnn,
140 );
141
142 // Generate meta-training tasks
143 let num_tasks = 20;
144 let mut tasks = Vec::new();
145
146 for _ in 0..num_tasks {
147 let task = FewShotLearner::generate_episode(
148 data, labels, 3, // 3-way (fewer classes for MAML)
149 5, // 5-shot
150 5, // 5 query examples
151 )?;
152 tasks.push(task);
153 }
154
155 // Meta-train
156 let mut meta_optimizer = Adam::new(0.001);
157 let losses = learner.train(&tasks, &mut meta_optimizer, 10)?;
158
159 println!(" Meta-training completed:");
160 println!(" - Initial loss: {:.4}", losses[0]);
161 println!(" - Final loss: {:.4}", losses.last().unwrap());
162 println!(
163 " - Convergence rate: {:.2}%",
164 (1.0 - losses.last().unwrap() / losses[0]) * 100.0
165 );
166
167 Ok(())
168}
169
170/// Compare performance across different K-shot values
171fn compare_shot_performance(
172 data: &Array2<f64>,
173 labels: &Array1<usize>,
174 qnn: QuantumNeuralNetwork,
175) -> Result<()> {
176 let k_values = vec![1, 3, 5, 10];
177
178 for k in k_values {
179 println!("\n Testing {k}-shot learning:");
180
181 let mut learner = FewShotLearner::new(FewShotMethod::PrototypicalNetworks, qnn.clone());
182
183 // Generate episodes
184 let mut episodes = Vec::new();
185 for _ in 0..5 {
186 let episode = FewShotLearner::generate_episode(
187 data, labels, 3, // 3-way
188 k, // k-shot
189 5, // 5 query
190 )?;
191 episodes.push(episode);
192 }
193
194 // Quick training
195 let mut optimizer = Adam::new(0.01);
196 let accuracies = learner.train(&episodes, &mut optimizer, 10)?;
197
198 println!(
199 " Final accuracy: {:.2}%",
200 accuracies.last().unwrap() * 100.0
201 );
202 }
203
204 Ok(())
205}Sourcepub fn generate_episode(
data: &Array2<f64>,
labels: &Array1<usize>,
num_classes: usize,
k_shot: usize,
query_per_class: usize,
) -> Result<Episode>
pub fn generate_episode( data: &Array2<f64>, labels: &Array1<usize>, num_classes: usize, k_shot: usize, query_per_class: usize, ) -> Result<Episode>
Generate episode from dataset
Examples found in repository?
examples/few_shot_learning.rs (lines 105-109)
93fn test_prototypical_networks(
94 data: &Array2<f64>,
95 labels: &Array1<usize>,
96 qnn: QuantumNeuralNetwork,
97) -> Result<()> {
98 let mut learner = FewShotLearner::new(FewShotMethod::PrototypicalNetworks, qnn);
99
100 // Generate episodes for training
101 let num_episodes = 10;
102 let mut episodes = Vec::new();
103
104 for _ in 0..num_episodes {
105 let episode = FewShotLearner::generate_episode(
106 data, labels, 5, // 5-way
107 3, // 3-shot
108 5, // 5 query examples per class
109 )?;
110 episodes.push(episode);
111 }
112
113 // Train
114 let mut optimizer = Adam::new(0.01);
115 let accuracies = learner.train(&episodes, &mut optimizer, 20)?;
116
117 // Print results
118 println!(" Training completed:");
119 println!(" - Initial accuracy: {:.2}%", accuracies[0] * 100.0);
120 println!(
121 " - Final accuracy: {:.2}%",
122 accuracies.last().unwrap() * 100.0
123 );
124 println!(
125 " - Improvement: {:.2}%",
126 (accuracies.last().unwrap() - accuracies[0]) * 100.0
127 );
128
129 Ok(())
130}
131
132/// Test MAML
133fn test_maml(data: &Array2<f64>, labels: &Array1<usize>, qnn: QuantumNeuralNetwork) -> Result<()> {
134 let mut learner = FewShotLearner::new(
135 FewShotMethod::MAML {
136 inner_steps: 5,
137 inner_lr: 0.01,
138 },
139 qnn,
140 );
141
142 // Generate meta-training tasks
143 let num_tasks = 20;
144 let mut tasks = Vec::new();
145
146 for _ in 0..num_tasks {
147 let task = FewShotLearner::generate_episode(
148 data, labels, 3, // 3-way (fewer classes for MAML)
149 5, // 5-shot
150 5, // 5 query examples
151 )?;
152 tasks.push(task);
153 }
154
155 // Meta-train
156 let mut meta_optimizer = Adam::new(0.001);
157 let losses = learner.train(&tasks, &mut meta_optimizer, 10)?;
158
159 println!(" Meta-training completed:");
160 println!(" - Initial loss: {:.4}", losses[0]);
161 println!(" - Final loss: {:.4}", losses.last().unwrap());
162 println!(
163 " - Convergence rate: {:.2}%",
164 (1.0 - losses.last().unwrap() / losses[0]) * 100.0
165 );
166
167 Ok(())
168}
169
170/// Compare performance across different K-shot values
171fn compare_shot_performance(
172 data: &Array2<f64>,
173 labels: &Array1<usize>,
174 qnn: QuantumNeuralNetwork,
175) -> Result<()> {
176 let k_values = vec![1, 3, 5, 10];
177
178 for k in k_values {
179 println!("\n Testing {k}-shot learning:");
180
181 let mut learner = FewShotLearner::new(FewShotMethod::PrototypicalNetworks, qnn.clone());
182
183 // Generate episodes
184 let mut episodes = Vec::new();
185 for _ in 0..5 {
186 let episode = FewShotLearner::generate_episode(
187 data, labels, 3, // 3-way
188 k, // k-shot
189 5, // 5 query
190 )?;
191 episodes.push(episode);
192 }
193
194 // Quick training
195 let mut optimizer = Adam::new(0.01);
196 let accuracies = learner.train(&episodes, &mut optimizer, 10)?;
197
198 println!(
199 " Final accuracy: {:.2}%",
200 accuracies.last().unwrap() * 100.0
201 );
202 }
203
204 Ok(())
205}Sourcepub fn train(
&mut self,
episodes: &[Episode],
optimizer: &mut dyn Optimizer,
epochs: usize,
) -> Result<Vec<f64>>
pub fn train( &mut self, episodes: &[Episode], optimizer: &mut dyn Optimizer, epochs: usize, ) -> Result<Vec<f64>>
Train the few-shot learner
Examples found in repository?
examples/few_shot_learning.rs (line 115)
93fn test_prototypical_networks(
94 data: &Array2<f64>,
95 labels: &Array1<usize>,
96 qnn: QuantumNeuralNetwork,
97) -> Result<()> {
98 let mut learner = FewShotLearner::new(FewShotMethod::PrototypicalNetworks, qnn);
99
100 // Generate episodes for training
101 let num_episodes = 10;
102 let mut episodes = Vec::new();
103
104 for _ in 0..num_episodes {
105 let episode = FewShotLearner::generate_episode(
106 data, labels, 5, // 5-way
107 3, // 3-shot
108 5, // 5 query examples per class
109 )?;
110 episodes.push(episode);
111 }
112
113 // Train
114 let mut optimizer = Adam::new(0.01);
115 let accuracies = learner.train(&episodes, &mut optimizer, 20)?;
116
117 // Print results
118 println!(" Training completed:");
119 println!(" - Initial accuracy: {:.2}%", accuracies[0] * 100.0);
120 println!(
121 " - Final accuracy: {:.2}%",
122 accuracies.last().unwrap() * 100.0
123 );
124 println!(
125 " - Improvement: {:.2}%",
126 (accuracies.last().unwrap() - accuracies[0]) * 100.0
127 );
128
129 Ok(())
130}
131
132/// Test MAML
133fn test_maml(data: &Array2<f64>, labels: &Array1<usize>, qnn: QuantumNeuralNetwork) -> Result<()> {
134 let mut learner = FewShotLearner::new(
135 FewShotMethod::MAML {
136 inner_steps: 5,
137 inner_lr: 0.01,
138 },
139 qnn,
140 );
141
142 // Generate meta-training tasks
143 let num_tasks = 20;
144 let mut tasks = Vec::new();
145
146 for _ in 0..num_tasks {
147 let task = FewShotLearner::generate_episode(
148 data, labels, 3, // 3-way (fewer classes for MAML)
149 5, // 5-shot
150 5, // 5 query examples
151 )?;
152 tasks.push(task);
153 }
154
155 // Meta-train
156 let mut meta_optimizer = Adam::new(0.001);
157 let losses = learner.train(&tasks, &mut meta_optimizer, 10)?;
158
159 println!(" Meta-training completed:");
160 println!(" - Initial loss: {:.4}", losses[0]);
161 println!(" - Final loss: {:.4}", losses.last().unwrap());
162 println!(
163 " - Convergence rate: {:.2}%",
164 (1.0 - losses.last().unwrap() / losses[0]) * 100.0
165 );
166
167 Ok(())
168}
169
170/// Compare performance across different K-shot values
171fn compare_shot_performance(
172 data: &Array2<f64>,
173 labels: &Array1<usize>,
174 qnn: QuantumNeuralNetwork,
175) -> Result<()> {
176 let k_values = vec![1, 3, 5, 10];
177
178 for k in k_values {
179 println!("\n Testing {k}-shot learning:");
180
181 let mut learner = FewShotLearner::new(FewShotMethod::PrototypicalNetworks, qnn.clone());
182
183 // Generate episodes
184 let mut episodes = Vec::new();
185 for _ in 0..5 {
186 let episode = FewShotLearner::generate_episode(
187 data, labels, 3, // 3-way
188 k, // k-shot
189 5, // 5 query
190 )?;
191 episodes.push(episode);
192 }
193
194 // Quick training
195 let mut optimizer = Adam::new(0.01);
196 let accuracies = learner.train(&episodes, &mut optimizer, 10)?;
197
198 println!(
199 " Final accuracy: {:.2}%",
200 accuracies.last().unwrap() * 100.0
201 );
202 }
203
204 Ok(())
205}Auto Trait Implementations§
impl Freeze for FewShotLearner
impl RefUnwindSafe for FewShotLearner
impl Send for FewShotLearner
impl Sync for FewShotLearner
impl Unpin for FewShotLearner
impl UnsafeUnpin for FewShotLearner
impl UnwindSafe for FewShotLearner
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> 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.