pub struct ContinualMetaLearner { /* private fields */ }Expand description
Continual meta-learning with memory
Implementations§
Source§impl ContinualMetaLearner
impl ContinualMetaLearner
Sourcepub fn new(
meta_learner: QuantumMetaLearner,
memory_capacity: usize,
replay_ratio: f64,
) -> Self
pub fn new( meta_learner: QuantumMetaLearner, memory_capacity: usize, replay_ratio: f64, ) -> Self
Create new continual meta-learner
Examples found in repository?
examples/quantum_meta_learning.rs (lines 319-323)
302fn continual_meta_learning_demo() -> Result<()> {
303 let layers = vec![
304 QNNLayerType::EncodingLayer { num_features: 4 },
305 QNNLayerType::VariationalLayer { num_params: 8 },
306 QNNLayerType::MeasurementLayer {
307 measurement_basis: "computational".to_string(),
308 },
309 ];
310
311 let qnn = QuantumNeuralNetwork::new(layers, 4, 4, 2)?;
312
313 let algorithm = MetaLearningAlgorithm::Reptile {
314 inner_steps: 5,
315 inner_lr: 0.05,
316 };
317
318 let meta_learner = QuantumMetaLearner::new(algorithm, qnn);
319 let mut continual_learner = ContinualMetaLearner::new(
320 meta_learner,
321 10, // memory capacity
322 0.3, // replay ratio
323 );
324
325 println!(" Created Continual Meta-Learner:");
326 println!(" - Memory capacity: 10 tasks");
327 println!(" - Replay ratio: 30%");
328
329 // Generate sequence of tasks
330 let generator = TaskGenerator::new(4, 2);
331
332 println!("\n Learning sequence of tasks...");
333 for i in 0..20 {
334 let task = if i < 10 {
335 generator.generate_rotation_task(30)
336 } else {
337 generator.generate_sinusoid_task(30)
338 };
339
340 continual_learner.learn_task(task)?;
341
342 if i % 5 == 4 {
343 println!(
344 " Learned {} tasks, memory contains {} unique tasks",
345 i + 1,
346 continual_learner.memory_buffer_len()
347 );
348 }
349 }
350
351 println!("\n Continual learning prevents catastrophic forgetting");
352
353 Ok(())
354}Sourcepub fn learn_task(&mut self, new_task: MetaTask) -> Result<()>
pub fn learn_task(&mut self, new_task: MetaTask) -> Result<()>
Learn new task while preserving old knowledge
Examples found in repository?
examples/quantum_meta_learning.rs (line 340)
302fn continual_meta_learning_demo() -> Result<()> {
303 let layers = vec![
304 QNNLayerType::EncodingLayer { num_features: 4 },
305 QNNLayerType::VariationalLayer { num_params: 8 },
306 QNNLayerType::MeasurementLayer {
307 measurement_basis: "computational".to_string(),
308 },
309 ];
310
311 let qnn = QuantumNeuralNetwork::new(layers, 4, 4, 2)?;
312
313 let algorithm = MetaLearningAlgorithm::Reptile {
314 inner_steps: 5,
315 inner_lr: 0.05,
316 };
317
318 let meta_learner = QuantumMetaLearner::new(algorithm, qnn);
319 let mut continual_learner = ContinualMetaLearner::new(
320 meta_learner,
321 10, // memory capacity
322 0.3, // replay ratio
323 );
324
325 println!(" Created Continual Meta-Learner:");
326 println!(" - Memory capacity: 10 tasks");
327 println!(" - Replay ratio: 30%");
328
329 // Generate sequence of tasks
330 let generator = TaskGenerator::new(4, 2);
331
332 println!("\n Learning sequence of tasks...");
333 for i in 0..20 {
334 let task = if i < 10 {
335 generator.generate_rotation_task(30)
336 } else {
337 generator.generate_sinusoid_task(30)
338 };
339
340 continual_learner.learn_task(task)?;
341
342 if i % 5 == 4 {
343 println!(
344 " Learned {} tasks, memory contains {} unique tasks",
345 i + 1,
346 continual_learner.memory_buffer_len()
347 );
348 }
349 }
350
351 println!("\n Continual learning prevents catastrophic forgetting");
352
353 Ok(())
354}Sourcepub fn memory_buffer_len(&self) -> usize
pub fn memory_buffer_len(&self) -> usize
Get memory buffer length
Examples found in repository?
examples/quantum_meta_learning.rs (line 346)
302fn continual_meta_learning_demo() -> Result<()> {
303 let layers = vec![
304 QNNLayerType::EncodingLayer { num_features: 4 },
305 QNNLayerType::VariationalLayer { num_params: 8 },
306 QNNLayerType::MeasurementLayer {
307 measurement_basis: "computational".to_string(),
308 },
309 ];
310
311 let qnn = QuantumNeuralNetwork::new(layers, 4, 4, 2)?;
312
313 let algorithm = MetaLearningAlgorithm::Reptile {
314 inner_steps: 5,
315 inner_lr: 0.05,
316 };
317
318 let meta_learner = QuantumMetaLearner::new(algorithm, qnn);
319 let mut continual_learner = ContinualMetaLearner::new(
320 meta_learner,
321 10, // memory capacity
322 0.3, // replay ratio
323 );
324
325 println!(" Created Continual Meta-Learner:");
326 println!(" - Memory capacity: 10 tasks");
327 println!(" - Replay ratio: 30%");
328
329 // Generate sequence of tasks
330 let generator = TaskGenerator::new(4, 2);
331
332 println!("\n Learning sequence of tasks...");
333 for i in 0..20 {
334 let task = if i < 10 {
335 generator.generate_rotation_task(30)
336 } else {
337 generator.generate_sinusoid_task(30)
338 };
339
340 continual_learner.learn_task(task)?;
341
342 if i % 5 == 4 {
343 println!(
344 " Learned {} tasks, memory contains {} unique tasks",
345 i + 1,
346 continual_learner.memory_buffer_len()
347 );
348 }
349 }
350
351 println!("\n Continual learning prevents catastrophic forgetting");
352
353 Ok(())
354}Auto Trait Implementations§
impl Freeze for ContinualMetaLearner
impl RefUnwindSafe for ContinualMetaLearner
impl Send for ContinualMetaLearner
impl Sync for ContinualMetaLearner
impl Unpin for ContinualMetaLearner
impl UnsafeUnpin for ContinualMetaLearner
impl UnwindSafe for ContinualMetaLearner
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.