Galaxy Zoo Kaggle Competition Redux with Fast.ai

Redoing the Galaxy Zoo Kaggle competition .

Continue reading →

Fast.ai Lesson 6 Notes

My personal notes on Lesson 6 of part 1 of fast.ai (2019) -- Regularization; Convolutions; Data ethics.

Continue reading →

Fast.ai Lesson 5 Notes

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

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

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

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

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.

Continue reading →

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.

Continue reading →

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.

Continue reading →

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 →

Hello

Hello, World!

Continue reading →