Downloads · 30 days
0
johnpolat/CrysMTM
CrysMTM is a machine learning model from johnpolat. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
- Repository: CrysMTM - Paper: CrysMTM: A Multiphase, Temperature-Resolved, Multimodal Dataset for Crystalline Materials - Authors: Can Polat, Erchin Serpedin, Mustafa Kurban, and Hasan Kurban - Point of Contact: Can…
Downloads · 30 days
0
Access
Public
Updated Jul 8, 2025
Repo size
—
Likes
0
Public
Click a slice to open those files.
.txt3.4 MB · 55%
From the Hugging Face model README
CrysMTM is a comprehensive multiphase, temperature-resolved, multimodal dataset for crystalline materials research, specifically focused on titanium dioxide (TiO₂) polymorphs. The dataset is designed primarily for regression tasks to predict 9 key material properties from multimodal inputs. It contains three crystalline phases of TiO₂ (anatase, brookite, and rutile) across a temperature range of 0-1000K, with multiple data modalities including atomic coordinates, visual representations, and textual descriptions.
The dataset primarily supports regression tasks for materials property prediction:
The dataset contains English text descriptions of crystal structures and properties.
Each data instance represents a TiO₂ crystal structure at a specific temperature and rotation, containing:
phase (string): Crystal phase - "anatase", "brookite", or "rutile"temperature (integer): Temperature in Kelvin (0, 50, 100, ..., 1000)rotation (integer): Rotation index for the crystal structureimage (PIL.Image): Visual representation of the crystal structure (PNG format)xyz (torch.Tensor): Atomic coordinates in XYZ format (N×3 tensor)text (string): Textual description of the crystal structure and propertieselement (list): List of element symbols for each atomPrimary Labels - Regression:
regression_label (torch.Tensor): 9-dimensional tensor containing the main prediction targets:
HOMO (float): HOMO energy (E_H) in eVLUMO (float): LUMO energy (E_L) in eVEg (float): Band gap energy (E_g) in eVEf (float): Fermi energy (E_f) in eVEt (float): Total energy of the system (E_T) in eVEta (float): Total energy per atom (E_Ta) in eVdisp (float): Maximum atomic displacement (Δr_max) in Åvol (float): Volumetric expansion (ΔV) in ųbond (float): Ti-O bond length change (Δd_Ti-O) in ÅSecondary Labels - Classification:
label (integer): Phase label (0=anatase, 1=brookite, 2=rutile)LLM Task Labels:
The dataset is organized by temperature ranges:
@dataset{crysmtm2024,
title={CrysMTM: A Multiphase, Temperature-Resolved, Multimodal Dataset for Crystalline Materials},
author={Can Polat and Erchin Serpedin and Mustafa Kurban and Hasan Kurban},
year={2024},
url={https://github.com/KurbanIntelligenceLab/CrysMTM}
}
# Download load_dataset.py from the repository and place it in your data directory
from load_dataset import load_dataset
# Load the dataset
dataset = load_dataset(".")
# Access splits
train_dataset = dataset["train"] # 5,064 samples
test_id_dataset = dataset["test_id"] # 1,380 samples
test_ood_dataset = dataset["test_ood"] # 6,588 samples
# Get a sample
sample = train_dataset[0]
print(f"Phase: {sample['phase']}")
print(f"Temperature: {sample['temperature']}K")
print(f"Image: {sample['image']}")
print(f"Regression labels: {sample['regression_labels']}")
from dataloaders.regression_dataloader import RegressionLoader
# Load dataset for regression (main task)
dataset = RegressionLoader(
label_dir="data",
modalities=["image", "xyz", "text"],
normalize_labels=True
)
# Get a sample
sample = dataset[0]
print(f"Target Properties: {sample['regression_label']}")
print(f"Temperature: {sample['temperature']}K")
print(f"Phase: {sample['phase']}")
print(f"Image shape: {sample['image'].size}")
print(f"XYZ coordinates shape: {sample['xyz'].shape}")
from dataloaders.llm_regression_dataloader import LLMLoader
# Load dataset for LLM property prediction (main task)
dataset = LLMLoader(
label_dir="data",
modalities=["text", "image"]
)
# Get a sample for zero-shot/few-shot property prediction
sample = dataset[0]
print(f"HOMO: {sample['HOMO']}")
print(f"LUMO: {sample['LUMO']}")
print(f"Band gap: {sample['Eg']}")
print(f"Temperature: {sample['temperature']}K")
print(f"Phase: {sample['phase']}")
from dataloaders.llm_regression_dataloader import LLMLoader
# Load dataset for LLM summary generation (secondary task)
dataset = LLMLoader(
label_dir="data",
modalities=["text", "image"]
)
# Get a sample for summary generation
sample = dataset[0]
print(f"Input text: {sample['text'][:200]}...")
print(f"Target properties: {sample['HOMO']}, {sample['LUMO']}, {sample['Eg']}")
from dataloaders.classification_dataloader import ClassificationLoader
# Load dataset for classification (tertiary task)
dataset = ClassificationLoader(
base_dir="data",
modalities=["image", "xyz", "text"],
max_rotations=10
)
# Get a sample
sample = dataset[0]
print(f"Phase: {sample['label']}")
print(f"Image shape: {sample['image'].size}")
print(f"XYZ coordinates shape: {sample['xyz'].shape}")
print(f"Text: {sample['text'][:100]}...")
# For graph neural networks
dataset = ClassificationLoader(
base_dir="data",
modalities=["xyz", "element"],
as_pyg_data=True
)
# Returns PyG Data objects
sample = dataset[0]
print(f"Node features: {sample.z}")
print(f"Positions: {sample.pos}")
print(f"Label: {sample.y}")
data/
├── anatase/
│ ├── 0K/
│ │ ├── images/
│ │ │ ├── rot_0.png
│ │ │ ├── rot_1.png
│ │ │ └── ...
│ │ ├── xyz/
│ │ │ ├── rot_0.xyz
│ │ │ ├── rot_1.xyz
│ │ │ └── ...
│ │ └── text/
│ │ ├── rot_0.txt
│ │ ├── rot_1.txt
│ │ └── ...
│ ├── 50K/
│ └── ...
├── brookite/
├── rutile/
└── labels.csv
Standard XYZ format with atomic coordinates:
[number of atoms]
[comment line]
[element] [x] [y] [z]
[element] [x] [y] [z]
...
PNG format visualizations of crystal structures.
Natural language descriptions of crystal structures and properties.
Contains material properties for each phase-temperature combination:
Polymorph,Temperature,Parameter,Value
anatase,0K,HOMO,-7.2340
anatase,0K,LUMO,-4.1234
...
The dataset is compatible with various model architectures:
The nanoparticle summary task requires domain-specific evaluation beyond traditional string-based metrics like ROUGE or BLEU, which do not penalize incorrect numerical values. A more meaningful strategy is to extract structured key–value pairs-such as particle size, center of mass, coordination numbers, or bond angles-and compare them to ground truth using:
A three-class classification task to distinguish among the TiO₂ polymorphs. While overall accuracy provides a general overview, it is important to also report: