Fast.ai v3 Lesson 12 Notes: Advanced training techniques; ULMFiT from scratch
My personal notes on Lesson 12 of part 2 of fast.ai (v3, 2019) -- Advanced training techniques; ULMFiT from scratch.
Continue reading →Fast.ai v3 Lesson 11 Notes: Data Block API, the Generic Optimizer, Data Augmentation
My personal notes on Lesson 11 of part 2 of fast.ai (v3, 2019) -- Data Block API, the Generic Optimzier, and Data Augmentation.
Continue reading →Fast.ai Lesson 10 Notes: Looking inside the model
My personal notes on Lesson 10 of part 2 of fast.ai (2019) -- Looking inside the model.
Continue reading →Fast.ai Lesson 9 Notes: Training in Depth
My personal notes on Lesson 9 of part 2 of fast.ai (2019) -- Loss functions, optimizers, and the training loop.
Continue reading →Fast.ai Lesson 8 Notes: Backprop from the Foundations
My personal notes on Lesson 8 of part 2 of fast.ai (2019) -- Matrix Multiplication; Forward and Backward Passes.
Continue reading →Galaxy Zoo Kaggle Competition Redux with Fast.ai
In this post I use Fastai to tackle the Galaxy Zoo Kaggle competition from 2014. This is a multi-class classification problem using deep learning. (Image by Antonio Ciccolella / M. De Leo) .
Continue reading →Fast.ai Lesson 6 Notes: CNN Deep Dive; Ethics
My personal notes on Lesson 6 of part 1 of fast.ai (2019) -- Regularization; Convolutions; Data ethics.
Continue reading →Fast.ai Lesson 5 Notes: Backpropagation; Neural Network From Scratch
My personal notes on Lesson 5 of part 1 of fast.ai (2019) -- Back propagation; Accelerated SGD; Neural net from scratch.
Continue reading →Fast.ai Lesson 4 Notes: NLP; Tabular Data; Recommenders
My personal notes on Lesson 4 of part 1 of fast.ai (2019) -- NLP; Tabular data; Collaborative filtering; Embeddings.
Continue reading →Fast.ai Lesson 3 Notes: Multi-label, Segmentation
My personal notes on Lesson 3 of part 1 of fast.ai (2019) -- Data blocks; Multi-label classification; Segmentation.
Continue reading →SGD From Scratch (fast.ai)
A deeper dive into fast.ai Lesson 2: SGD from Scratch.
Continue reading →Fast.ai Lesson 2 Notes: Data Cleaning and Production
My personal notes on Lesson 2 of part 1 of fast.ai (2019) -- Data cleaning and production; SGD from scratch.
Continue reading →Fast.ai Lesson 1 Notes: Image Classification
My personal notes on Lesson 1 of part 1 of fast.ai (2019) -- Image classification.
Continue reading →My First Pull Request
My first pull request to an open source probject was merged into fastai.
Continue reading →SIFTing Images
In this post I describe my work on extracting and filtering printers' ornaments from digitized 18th century documents in Fleuron project at the University of Cambridge in 2016. I used techniques from computer vision and machine learning to accomplish my goals.
Continue reading →Polymorphism in Clojure: A Tutorial Using Numbers (3/3)
This three part series of blog posts is a tutorial on how Clojure tackles the problem of polymorphism by implementing the Number system from SICP in Clojure using its protocols and multiple dispatch features. The Number system has exactly the right level of complexity to require the use of all of Clojure's features for polymorphism.
In Part 3 I extend the system so that you can perform arithmetic operations with mixed data types. I use Clojure's dispatch hierarchy here to build a system for promoting and demoting number types so we can perform these arithmetic operations.
Polymorphism in Clojure: A Tutorial Using Numbers (2/3)
This three part series of blog posts is a tutorial on how Clojure tackles the problem of polymorphism by implementing the Number system from SICP in Clojure using its protocols and multiple dispatch features. The Number system has exactly the right level of complexity to require the use of all of Clojure's features for polymorphism.
In Part 2 I extend the system to have more number types and introduce Multiple Dispatch so that there is a common language for performing arithmetic operations on all the number types.
Polymorphism in Clojure: A Tutorial Using Numbers (1/3)
Through the years of use of conventional programming languages such as Python and C++, my thinking about programming was trapped within the Object Oriented model of these languages. When it came to solving a new problem my thinking would be dictated by how those languages wanted me to think and I was blind to any better way. It wasn't until I came across the 80s classic 'Structure and Interpretation of Computer Programs' (SICP) and the programming language Clojure that I started to see past thought models I had learned. One of the parts that was a real light-bulb moment for me was the chapter on 'Data-directed programming'. This chapter provides the clearest explanation of the problem of Polymorphism I've ever read.
This three part series of blog posts is a tutorial on how Clojure tackles the problem of polymorphism by implementing the Number system from SICP in Clojure using its protocols and multiple dispatch features. The Number system has exactly the right level of complexity to require the use of all of Clojure's features for polymorphism.
In Part 1, I implement Complex Numbers with two different representations, and show how to abstract away the difference using Protocols. In the end we end up with a system that can add, divide, and multiply complex numbers regardless of their internal representation.
Experiments with Julia
In this post I do performance experiments with the SIMD support the programming language Julia and compare the speed to equivalent code written in C++.
Continue reading →