Time Description
9:30 - 10:30 Track 1 Testing (Part 1) - Lucia Windsor
Dominic Orchard, ICCS
Isaac Akanho, ICCS

Many of us will have had the experience of bugs in our code, that is, mistakes that impact the intended function and functioning of our software. Such mistakes slow down development, impinge on collaboration, reduce the likelihood of our code being used by others, and in the scientific context, can lead to serious mistakes in publications. Approaches to software verification are therefore useful to help reduce the occurrence of bugs and assess whether code implements its intended specification / model. One well-established lightweight technique for evaluating software correctness is testing, where additional code is written that provides a partial specification of program behaviour. In this course, we will study the foundations of software testing, including the use of tools to automate the deployment of tests. We will specifically look at the mechanics of, and best practices for, three kinds of tests: unit tests, integration tests, and property-based tests. The first two are more widely deployed already in science whereas the third technique (property-based testing) is still an underutilised, but powerful, tool. Python will be used for running examples and exercises but the concepts can be applied in almost any programming language. We will point to resources for a few other languages popular in science such as Fortran.

Pre-requisites:
The concepts discussed in this course can be applied to almost any programming language, however we will use Python as a vehicle for specific examples and exercises. Therefore having at least a basic knowledge of Python will be useful as well as a working Python 3 installation on your system.
9:30 - 10:30 Track 2 Practical Machine Learning with PyTorch (Part 3) - Sidgwick Hall
Matt Archer, ICCS
Isaac Akanho, ICCS

Following on from Parts 1 and 2
10:30 - 11:00 Break (tea and coffee)
11:00 - 12:30 Track 1 FTorch: Coupling ML and Numerical Models in Fortran - Lucia Windsor
Jack Atkinson, ICCS
Joe Wallwork, ICCS

Many projects seek to leverage machine learnt components as part of larger models.
This often brings about the challenge of language interoperation - how can we run our ML models, often PyTorch-based, from within large-scale climate models written in compiled languages.

ICCS develops and maintains the FTorch library (https://github.com/Cambridge-ICCS/FTorch) to facilitate the easy deployment of PyTorch-based models within Fortran codes. In this session we will introduce the library and follow a hands-on tutorial introducing key features, and going through how to save a net from Python and run it as part of a Fortran code.
If time allows we will showcase recent features around autograd and online training.

Pre-requisites:
- A GitHub account.
- Some previous experience with PyTorch and machine learning is useful but not essential.
- Previous exposure to Fortran or a similar compiled language is useful but not essential.
11:00 - 12:30 Track 2 Testing (Part 2) - Sidgwick Hall
Dominic Orchard, ICCS
Isaac Akanho, ICCS

Following on from Part 1
12:30 - 13:30 Lunch (Newnham College Garden Marquee)
13:30 - 15:00 Random Forests & Other Random Thoughts - Lucia Windsor
Robert Rouse, ICCS

Decision trees, random forests, and related models are commonly used machine learning models due to their relative ease of implementation and training, however they are similarly often misused.  The key learning objective here is to understand the fundamentals of random forests and related tree models from first principles, their strengths and weaknesses, and methods for understanding their sensitivity.  In the first half of the session, we will look at decision trees, random forests, and related models along with their formulation, training, and interpretability.  This will also cover topics including, but not necessarily limited to, feature permutation, platt scaling, and class imbalance.  In the second half, we will look at the practical application of random forests along with other models, including model implementation, model appropriateness, and application to real world datasets.

Pre-requisites:
First session:
Undergraduate level knowledge of linear algebra and calculus.
Have a working Python 3 installation on their system.
Download and install the scikit-learn library
Second session:
First session strict prerequisite.
Practical Machine Learning with PyTorch session
15:00 - 15:30 Break (tea and coffee)
15:30 - 16:00 Hackathon Administration - Lucia Windsor
16:00 - 17:00 Panel - Lucia Windsor
Working with RSEs and Project Management for Research Software
17:00 - 18:30 Free time
18:30 - 22:15 Pre-dinner drinks reception and formal dinner at Sidney Sussex College