/* Basic Styling */
body {
font-family: sans-serif;
margin: 0;
padding: 0;
}
# Continue the main() function where it was cut off
# Create label to id mapping if needed
unique_labels = sorted(set(train_labels + val_labels + test_labels))
num_labels = len(unique_labels)
logging.info(f”Found {num_labels} unique labels: {unique_labels}”)
if not all(isinstance(label, int) for label in train_labels):
# Convert string labels to integers
label_to_id = {label: i for i, label in enumerate(unique_labels)}
train_labels = [label_to_id[label] for label in train_labels]
val_labels = [label_to_id[label] for label in val_labels]
test_labels = [label_to_id[label] for label in test_labels]
logging.info(f”Converted labels to IDs: {label_to_id}”)
# Initialize model
logging.info(f”Initializing XnapASI model with echo_model={echo_model_name}, fusion_method={fusion_method}”)
model = XnapASI(echo_model_name=echo_model_name, fusion_method=fusion_method, num_labels=num_labels)
# Update dropout if specified
if dropout != 0.1:
model.dropout.p = dropout
logging.info(f”Updated dropout to {dropout}”)
# Create datasets
train_dataset = XnapASIDataset(
train_texts, train_labels, model.echo_tokenizer,
augment=args.use_augmentation, aug_prob=args.augmentation_prob
)
val_dataset = XnapASIDataset(val_texts, val_labels, model.echo_tokenizer)
test_dataset = XnapASIDataset(test_texts, test_labels, model.echo_tokenizer)
# Create dataloaders
train_dataloader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_dataloader = DataLoader(val_dataset, batch_size=batch_size)
test_dataloader = DataLoader(test_dataset, batch_size=batch_size)
# Load pre-trained model if specified
if args.load_model:
if os.path.exists(args.load_model):
model = XnapASI.load(args.load_model)
logging.info(f”Loaded pre-trained model from {args.load_model}”)
else:
logging.warning(f”Model file {args.load_model} not found. Initializing new model.”)
# Train model
if args.do_train:
logging.info(“Starting model training…”)
model = train_xnap_asi(
model=model,
train_dataloader=train_dataloader,
val_dataloader=val_dataloader,
epochs=args.epochs,
lr=learning_rate,
output_dir=args.output_dir,
use_amp=args.use_amp,
save_interval=args.save_interval,
max_grad_norm=args.max_grad_norm
)
logging.info(“Training completed.”)
# Evaluate model
if args.do_eval:
logging.info(“Starting model evaluation…”)
results = evaluate_xnap_asi(
model=model,
test_dataloader=test_dataloader,
output_dir=os.path.join(args.output_dir, “evaluation”)
)
logging.info(f”Evaluation complete. Results: {results}”)
logging.info(“All tasks completed.”)
if __name__ == “__main__”:
parser = argparse.ArgumentParser(description=”Train and evaluate XnapASI model”)
# Data arguments
parser.add_argument(“–data_path”, type=str, required=True, help=”Path to the data file”)
parser.add_argument(“–test_size”, type=float, default=0.2, help=”Proportion of data for testing”)
parser.add_argument(“–val_size”, type=float, default=0.1, help=”Proportion of data for validation”)
# Model arguments
parser.add_argument(“–echo_model_name”, type=str, default=”gpt2″, help=”Name of the echo model”)
parser.add_argument(“–fusion_method”, type=str, default=”weighted”,
choices=[“weighted”, “attention”, “gating”, “concat”],
help=”Method to fuse representations”)
parser.add_argument(“–load_model”, type=str, default=None, help=”Path to load pre-trained model”)
# Training arguments
parser.add_argument(“–do_train”, action=”store_true”, help=”Whether to train the model”)
parser.add_argument(“–do_eval”, action=”store_true”, help=”Whether to evaluate the model”)
parser.add_argument(“–epochs”, type=int, default=10, help=”Number of training epochs”)
parser.add_argument(“–batch_size”, type=int, default=32, help=”Batch size for training”)
parser.add_argument(“–learning_rate”, type=float, default=2e-5, help=”Learning rate”)
parser.add_argument(“–dropout”, type=float, default=0.1, help=”Dropout rate”)
parser.add_argument(“–use_amp”, action=”store_true”, help=”Use automatic mixed precision”)
parser.add_argument(“–save_interval”, type=int, default=1, help=”Save model every N epochs”)
parser.add_argument(“–max_grad_norm”, type=float, default=1.0, help=”Max gradient norm for clipping”)
parser.add_argument(“–use_augmentation”, action=”store_true”, help=”Use data augmentation”)
parser.add_argument(“–augmentation_prob”, type=float, default=0.5, help=”Probability of applying augmentation”)
# Optimization arguments
parser.add_argument(“–optimize”, action=”store_true”, help=”Perform hyperparameter optimization”)
parser.add_argument(“–optuna_trials”, type=int, default=20, help=”Number of Optuna trials”)
# Output arguments
parser.add_argument(“–output_dir”, type=str, default=”./models”, help=”Directory to save models”)
parser.add_argument(“–log_dir”, type=str, default=”./logs”, help=”Directory to save logs”)
# Miscellaneous
parser.add_argument(“–seed”, type=int, default=42, help=”Random seed”)
args = parser.parse_args()
main(args)
/* Header Styling */
header {
background-color: #333;
color: #fff;
text-align: center;
padding: 1rem 0;
}
h1 {
margin: 0;
font-size: 2rem;
}
/* Hero Section Styling */
.hero {
background-color: #f0f0f0;
text-align: center;
padding: 4rem 0;
}
.hero-image {
max-width: 800px;
margin: 0 auto;
display: block;
}
/* About Us Section Styling */
.about {
padding: 2rem;
background-color: #fff;
}
/* Services Section Styling */
.services {
background-color: #eee;
padding: 2rem;
}
.service-item {
margin-bottom: 2rem;
}
/* Portfolio Section Styling */
.portfolio {
padding: 2rem;
background-color: #fff;
}
/* Testimonials Section Styling */
.testimonials {
background-color: #eee;
padding: 2rem;
}
/* Contact Section Styling */
.contact {
background-color: #333;
color: #fff;
padding: 2rem;
}
/* Footer Styling */
footer {
background-color: #333;
color: #fff;
text-align: center;
padding: 1rem 0;
}