use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TransferLearningConfig {
pub enable_transfer_learning: bool,
pub source_domains: Vec<String>,
pub transfer_methods: Vec<TransferMethod>,
pub domain_adaptation: DomainAdaptationConfig,
pub meta_learning: MetaLearningConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum TransferMethod {
FeatureTransfer,
ParameterTransfer,
InstanceTransfer,
RelationalTransfer,
DomainAdversarial,
FewShotLearning,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DomainAdaptationConfig {
pub enable_adaptation: bool,
pub adaptation_methods: Vec<DomainAdaptationMethod>,
pub similarity_threshold: f64,
pub max_domain_gap: f64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DomainAdaptationMethod {
CausalInference,
DistributionMatching,
AdversarialTraining,
GradientReversal,
CORAL,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetaLearningConfig {
pub enable_meta_learning: bool,
pub meta_algorithms: Vec<MetaLearningAlgorithm>,
pub inner_loop_iterations: usize,
pub outer_loop_iterations: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MetaLearningAlgorithm {
MAML,
Reptile,
ProtoNet,
RelationNet,
MatchingNet,
}