|
--- |
|
license: mit |
|
language: |
|
- en |
|
tags: |
|
- climate |
|
--- |
|
|
|
# CAM-ML-YOG-v0: Machine Learning-based Convection Parameterization |
|
|
|
This repository contains a machine learning-based implementation of the convection parameterization in CAM (Community Atmosphere Model), leveraging PyTorch. |
|
|
|
## Model Overview |
|
The model is a PyTorch adaptation of the original Fortran-based convection parameterization in CAM. It simulates subgrid-scale convection processes within a climate model and was developed to improve accuracy and efficiency. |
|
|
|
### Key Features: |
|
- **Architecture**: The model is built with custom neural network layers as seen in [torch_nets/models.py](https://github.com/m2lines/convection-parameterization-in-CAM/blob/main/torch_nets/models.py). |
|
- **Data Handling**: Fortran-derived model weights are seamlessly converted to PyTorch, ensuring compatibility with existing CAM configurations. |
|
- **Training and Fine-tuning**: The model can be retrained or fine-tuned using custom climate data. |
|
|
|
## Model Conversion and Upload |
|
This model was converted from the original CAM implementation by extracting the weights from Fortran and converting them into a PyTorch-compatible format. This conversion process involved the following steps: |
|
1. **Extract Fortran Weights**: Weights were extracted from the original CAM Fortran implementation. |
|
2. **Convert to PyTorch**: Using custom scripts, the weights were converted into a format compatible with PyTorch models. |
|
3. **Upload to Hugging Face**: The model was validated and uploaded to the Hugging Face Model Hub. |
|
|
|
## Usage |
|
|
|
To use the model in PyTorch, first install the necessary dependencies: |
|
|
|
```bash |
|
pip install torch huggingface_hub |
|
``` |
|
|
|
Then, download and load the model as follows: |
|
|
|
```python |
|
from huggingface_hub import hf_hub_download |
|
import torch |
|
|
|
# Download model weights |
|
model_path = hf_hub_download(repo_id="ICCS/cam-ml-yog-v0", filename="model.pth") |
|
|
|
# Load model (replace 'YourModel' with the appropriate model class from torch_nets/models.py) |
|
model = YourModel() |
|
model.load_state_dict(torch.load(model_path)) |
|
model.eval() |
|
|
|
# Use the model for predictions |
|
input_data = ... # Prepare your climate input data |
|
output = model(input_data) |
|
``` |
|
|
|
### Fine-tuning |
|
|
|
The model is designed to be easily fine-tuned using domain-specific climate data: |
|
|
|
```python |
|
# Fine-tune the model |
|
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) |
|
loss_fn = torch.nn.MSELoss() |
|
|
|
# Example training loop |
|
for epoch in range(epochs): |
|
optimizer.zero_grad() |
|
output = model(input_data) |
|
loss = loss_fn(output, target_data) |
|
loss.backward() |
|
optimizer.step() |
|
``` |
|
|
|
## Weight Updates |
|
Please note that weight updates may be necessary as improvements are made to the model (see [Issue #66](https://github.com/m2lines/convection-parameterization-in-CAM/issues/66)). |
|
|
|
## References |
|
For more details on the original implementation and how to contribute to the model’s development, see the [GitHub repository](https://github.com/m2lines/convection-parameterization-in-CAM). |
|
|