A neural adjoint method implementation
Project description
MM-Neural-Adjoint
A Python package implementing neural adjoint methods, specifically designed for predicting the geometries of metamaterials. This implementation is based on the work from BDIMNNA (Benchmarking Deep Inverse Models over time, and the Neural-Adjoint method), published in NeurIPS 2020 by Simiao Ren, Willie J. Padilla and Jordan Malof.
About
This package focuses on the Neural Adjoint (NA) method for inverse design of metamaterials. It provides a streamlined implementation specifically optimized for metamaterial geometry prediction tasks, building upon the benchmarking work done in the original BDIMNNA repository.
Installation
This package supports different hardware configurations including CPU, Apple Silicon (M1/M2), and NVIDIA GPUs. Choose the appropriate installation method based on your hardware:
Basic Installation (CPU/Apple Silicon)
pip install MM-neural-adjoint
Usage
Basic Usage
Here's a simple example of how to use the package:
from mm_neural_adjoint import NANetwork, ConvModel, LinModel
import torch
from torch.utils.data import DataLoader, TensorDataset
# Initialize the model
geometry_size = 8 # Input size (geometry parameters)
spectrum_size = 300 # Output size (spectrum parameters)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# This can be any well defined torch model.
model = LinModel(geometry_size, spectrum_size)
model = NANetwork(
model=model
device=device
)
model.train(
epochs=100,
train_loader=train_loader,
val_loader=val_loader
)
MLflow Integration
The package uses MLflow for experiment tracking and model management. By default, MLflow data is stored in a local SQLite database (mlflow.db). Here's how to use MLflow features:
import mlflow
from mm_neural_adjoint import NANetwork
# Set a custom experiment name
model = NANetwork(
model=model,
device=device,
mlflow_exp_name="my_experiment" # Custom experiment name
)
# Training will automatically log:
# - Training loss
# - Validation loss
# - Best validation loss
# - Total training time
# - Model parameters
model.train(
epochs=100,
train_loader=train_loader,
val_loader=val_loader
)
# View MLflow UI
# Run this command in your terminal:
# mlflow ui
MLflow Features
-
Automatic Logging:
- Training metrics (loss, validation loss)
- Model parameters
- Training duration
- Model checkpoints
-
Experiment Organization:
- Each training run is tracked as a separate experiment
- Experiments are named using timestamps by default
- Custom experiment names can be set during model initialization
-
Model Checkpoints:
- Best models are automatically saved
- Checkpoints are stored in the
checkpoints/directory - MLflow tracks the relationship between metrics and checkpoints
-
Viewing Results:
# Start MLflow UI mlflow ui # Access the UI at http://localhost:5000
-
Custom Logging:
# Add custom metrics during training with mlflow.start_run(): mlflow.log_param("learning_rate", 0.001) mlflow.log_metric("custom_metric", value)
Requirements
- Python >= 3.10
- PyTorch >= 2.6.0
- NumPy >= 2.2.4
- Pandas >= 2.2.3
- tqdm >= 4.67.1
- MLflow >= 2.21.3
- scikit-learn >= 1.4.0
Examples
The package includes several example notebooks in the examples/ directory:
examples/example1.ipynb: Basic usage and trainingexamples/example2.ipynb: Advanced features and customization
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
This package is based on the Neural Adjoint implementation from the BDIMNNA repository by Benson Ren et al. We thank the original authors for their foundational work in developing and benchmarking the Neural Adjoint method.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mm_neural_adjoint-0.1.16.tar.gz.
File metadata
- Download URL: mm_neural_adjoint-0.1.16.tar.gz
- Upload date:
- Size: 420.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc6f03350975ae5e418eea5ea817ae9deefa748333eaf8377f81598ea839075b
|
|
| MD5 |
cd52c41860246cdb128e34b3c9dec794
|
|
| BLAKE2b-256 |
a20ccbffe481d1d68ff072f5522f5ca159872f73392714330ab5a3511011ae27
|
File details
Details for the file mm_neural_adjoint-0.1.16-py2.py3-none-any.whl.
File metadata
- Download URL: mm_neural_adjoint-0.1.16-py2.py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
739e775465d5025018d922af40c7d3d71c32ea40845384bd87d136b3a338c174
|
|
| MD5 |
72e3d7406595c7593ed86a0b628f7ed1
|
|
| BLAKE2b-256 |
e5cc8b8309ec3306f3fd86dfd70f3c341464150c8dc2b38ac03b3ab0d223f470
|