← Back to projects

Judo Clipper: Baseline Model

PythonPyTorchLSTMscikit-learn

Architecture, training configuration and validation results for the baseline LSTM throw-attempt classifier.

← Back to the Judo Clipper case study

Brief Summary of Model

The model is an LSTM with a feed-forward classification head. Its purpose is to determine whether a given input clip of a judo match contains at least one throw attempt.

The LSTM receives a sequence of 210 concatenated player pose vectors, each containing 68 features, with one vector for each frame in a 7-second clip. It produces one raw logit representing whether the complete clip contains a throw attempt. During evaluation or inference, the logit is converted into a probability and then into a binary prediction: throw attempt = 1 and no throw attempt = 0.

Architecture and Configurations

The baseline model consists of a two-layer LSTM followed by a feed-forward classification head. The classification head projects the LSTM’s final hidden-state representation into one raw logit for the complete clip.

HyperparameterValueDescription
LSTM Hidden Size128Balances representational capacity and overfitting
LSTM Layers2Captures hierarchical temporal features
BidirectionalFalseProcesses sequences strictly forward in time
Classifier Hidden Size64Intermediate projection before final logits
Dropout Rate0.30Regularization for dense classification layers

Baseline model architecture

Training Configurations

ParameterValueDetails
Epochs50Total passes over the training data
Batch Size32Number of sequences per batch
Learning Rate0.001Base step size for the optimizer
Weight Decay0.0001L2 regularization to penalize large weights

Dataset Split

The dataset was divided into stratified training, validation, and test splits using scikit-learn with a random seed of 42. The resulting split assignments were frozen and persisted in splits/dataset_v1_stratified_seed_42.csv so that every experiment uses exactly the same samples.

The proportions were:

SplitFraction (%)Manifest File / StrategyDetails / Purpose
Train80%splits/dataset_v1_stratified_seed_42.csv (Seed: 42)Model training and parameter updates
Validation10%splits/dataset_v1_stratified_seed_42.csv (Seed: 42)Hyperparameter tuning & threshold calibration
Test10%splits/dataset_v1_stratified_seed_42.csv (Seed: 42)Unbiased final performance evaluation

Given that the dataset contained 2,163 clips, the raw counts of the split were:

ClassTrainingValidationTestTotal
No throw1,1121391391,390
Throw attempt6187778773
Overall total1,7302162172,163

Results

Results of Training

Diagram of Training Losses

Baseline model training losses

Results of Evaluation Using the Validation Dataset Split

Evaluation Policy

The model returns raw logits. During evaluation, sigmoid converts logits into probabilities. A threshold of 0.50 was used as the initial reference, after which the validation threshold was selected by maximising attempt F1 according to the predefined tie-breaking policy. This selected a threshold of 0.53.

Results

Model & Checkpoint Configuration

ParameterValue
Splitvalidation
Checkpointbest
Checkpoint Epoch42
Checkpoint Validation Loss0.4941
Classification Threshold0.5300 (validation-selected)

Dataset Counts

MetricCount
Total Samples216
Actual Attempts77
Actual No-Attempts139

Confusion Matrix

Breakdown

MetricCount
True Positives (TP)61
True Negatives (TN)105
False Positives (FP)34
False Negatives (FN)16

2×2 Matrix View

Predicted: AttemptPredicted: No-Attempt
Actual: Attempt61 (TP)16 (FN)
Actual: No-Attempt34 (FP)105 (TN)

Classification Metrics

Overall Performance

  • Accuracy: 0.7685 (76.85%)
  • Macro F1: 0.7585

Per-Class Metrics

ClassPrecisionRecallF1-Score
Attempt0.64210.79220.7093
No-Attempt0.86780.75540.8077

Analysis of Results

Overall, the validation metrics and the shape of the training and validation loss curves indicate that the LSTM provides a credible baseline, although controlled architecture and hyperparameter experiments may improve its performance.

Analysis of Training Curve

There are 3 main points of interest regarding the curve of training losses:

  • The losses showed little apparent improvement during approximately the first 20–23 epochs, after which optimisation began producing clearer reductions.
  • The erratic spike after the 42nd epoch
  • The model doesn’t seem to be overfitting (the training and validation curves are moving together)

These findings could suggest that the model may be suffering from exploding gradients.

Analysis of Evaluation on Validation Data

The false positives are the main concern given the intended use for this model and 34 is slightly higher than desired for a baseline. However, the true positive count, true negative count, and macro F1 score are promising.

The F1 score for the no attempt category being slightly higher than for the attempt category was expected and isn’t currently of concern.

Next Steps

There are 2 relatively obvious next steps:

  • Implementing gradient clipping to address the potential exploding gradient issue.
  • Trying a bidirectional LSTM (as the model is processing the entire clip in post anyway)

These should both be tested as their own experiments and evaluated against the baseline.