Skip to content
heartKIT
User guide
HELIA

Model Evaluation

Evaluate mode is used to test the performance of the model on the reserved test set for the specified task. Similar to training, the routine can be customized via CLI configuration file or by setting the parameters directly in the code. The evaluation process involves testing the model’s performance on the test data to measure its accuracy, precision, recall, and F1 score. A number of results and metrics will be generated and saved to the job_dir.

  1. Load the configuration data (e.g. configuration.json)
  2. Load the desired datasets (e.g. PtbxlDataset)
  3. Load the corresponding task dataloaders (e.g. PtbxlDataLoader)
  4. Load the trained model (e.g. model.keras)
  5. Define the metrics (e.g. accuracy)
  6. Evaluate the model (e.g. model.evaluate)
  7. Generate evaluation report (e.g. report.json)

Example configuration

modes-evaluate-1.json150 lines · JSONDownload
Show full exampleCollapse example
modes-evaluate-1.json
{
"name": "arr-2-eff-sm",
"project": "hk-rhythm-2",
"job_dir": "./results/arr-2-eff-sm",
"verbose": 2,
"datasets": [
{
"name": "ptbxl",
"params": {
"path": "./datasets/ptbxl"
}
}
],
"num_classes": 2,
"class_map": {
"0": 0,
"7": 1,
"8": 1
},
"class_names": [
"NORMAL",
"AFIB/AFL"
],
"class_weights": "balanced",
"sampling_rate": 100,
"frame_size": 512,
"samples_per_patient": [
10,
10
],
"val_samples_per_patient": [
5,
5
],
"test_samples_per_patient": [
5,
5
],
"val_patients": 0.2,
"val_size": 20000,
"test_size": 20000,
"batch_size": 256,
"buffer_size": 20000,
"epochs": 100,
"steps_per_epoch": 50,
"val_metric": "loss",
"lr_rate": 0.001,
"lr_cycles": 1,
"threshold": 0.75,
"val_metric_threshold": 0.98,
"tflm_var_name": "g_rhythm_model",
"tflm_file": "rhythm_model_buffer.h",
"backend": "pc",
"demo_size": 896,
"display_report": true,
"quantization": {
"qat": false,
"format": "INT8",
"io_type": "int8",
"conversion": "CONCRETE",
"debug": false
},
"preprocesses": [
{
"name": "layer_norm",
"params": {
"epsilon": 0.01,
"name": "znorm"
}
}
],
"augmentations": [],
"model_file": "model.keras",
"use_logits": false,
"architecture": {
"name": "efficientnetv2",
"params": {
"input_filters": 16,
"input_kernel_size": [
1,
9
],
"input_strides": [
1,
2
],
"blocks": [
{
"filters": 24,
"depth": 2,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
},
{
"filters": 32,
"depth": 2,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
},
{
"filters": 40,
"depth": 2,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
},
{
"filters": 48,
"depth": 1,
"kernel_size": [
1,
9
],
"strides": [
1,
2
],
"ex_ratio": 1,
"se_ratio": 2
}
],
"output_filters": 0,
"include_top": true,
"use_logits": true
}
}
}
{
    "name": "arr-2-eff-sm",
    "project": "hk-rhythm-2",
    "job_dir": "./results/arr-2-eff-sm",
    "verbose": 2,
    "datasets": [
        {
            "name": "ptbxl",
… 142 more lines

Load configuration

Load test datasets and dataloaders

Load trained model

Set evaluation metrics

Evaluate model

Generate report


The following command will evaluate a rhythm model using the reference configuration.

Terminal
heartkit --task rhythm --mode evaluate --config ./configuration.json

The model can be evaluated using the following snippet:

Python example
task = hk.TaskFactory.get("rhythm")
params = hk.HKTaskParams(...)
task.evaluate(params)

Example configuration

modes-evaluate-4.py82 lines · PYTHONDownload
Show full exampleCollapse example
modes-evaluate-4.py
hk.HKTaskParams(
name="arr-2-eff-sm",
project="hk-rhythm-2",
job_dir="./results/arr-2-eff-sm",
verbose=2,
datasets=[hk.NamedParams(
name="ptbxl",
params=dict(
path="./datasets/ptbxl"
)
)],
num_classes=2,
class_map={
"0": 0,
"7": 1,
"8": 1
},
class_names=[
"NORMAL", "AFIB/AFL"
],
class_weights="balanced",
sampling_rate=100,
frame_size=512,
samples_per_patient=[10, 10],
val_samples_per_patient=[5, 5],
test_samples_per_patient=[5, 5],
val_patients=0.20,
val_size=20000,
test_size=20000,
batch_size=256,
buffer_size=20000,
epochs=100,
steps_per_epoch=50,
val_metric="loss",
lr_rate=1e-3,
lr_cycles=1,
threshold=0.75,
val_metric_threshold=0.98,
tflm_var_name="g_rhythm_model",
tflm_file="rhythm_model_buffer.h",
backend="pc",
demo_size=896,
display_report=True,
quantization=hk.QuantizationParams(
qat=False,
format="INT8",
io_type="int8",
conversion="CONCRETE",
debug=False
),
preprocesses=[
hk.NamedParams(
name="layer_norm",
params=dict(
epsilon=0.01,
name="znorm"
)
)
],
augmentations=[
],
model_file="model.keras",
use_logits=False,
architecture=hk.NamedParams(
name="efficientnetv2",
params=dict(
input_filters=16,
input_kernel_size=[1, 9],
input_strides=[1, 2],
blocks=[
{"filters": 24, "depth": 2, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2},
{"filters": 32, "depth": 2, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2},
{"filters": 40, "depth": 2, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2},
{"filters": 48, "depth": 1, "kernel_size": [1, 9], "strides": [1, 2], "ex_ratio": 1, "se_ratio": 2}
],
output_filters=0,
include_top=True,
use_logits=True
)
}
)

hk.HKTaskParams(
    name="arr-2-eff-sm",
    project="hk-rhythm-2",
    job_dir="./results/arr-2-eff-sm",
    verbose=2,
    datasets=[hk.NamedParams(
        name="ptbxl",
… 74 more lines

Please refer to HKTaskParams for the list of arguments that can be used with the evaluate command.