Added Weeks 4-8

This commit is contained in:
Oscar Blue 2022-03-28 16:46:12 +01:00
parent e6289a3f38
commit dbd46e99fe
45 changed files with 28499 additions and 168 deletions

1
.gitattributes vendored Normal file
View file

@ -0,0 +1 @@
*.png filter=lfs diff=lfs merge=lfs -text

10
content/posts/week-4.md Normal file
View file

@ -0,0 +1,10 @@
---
title: "Week 4"
date: 2022-02-27T12:46:59Z
draft: false
---
This week I did some research into how to build a CNN from scratch, including the different type of layers, loss functions, learning rates, epochs and other core concepts.[^1][^2]
[^1]: deeplizard. "Convolutional Neural Networks (CNNs) explained." (Dec. 9, 2017). Accessed: Feb. 22, 2022. [Online Video]. Available: https://youtube.com/watch?v=YRhxdVk_sIs
[^2]: A Rosebrock. "PyTorch: Training your first Convolutional Neural Network (CNN)". pyimagesearch.com. https://pyimagesearch.com/2021/07/19/pytorch-training-your-first-convolutional-neural-network-cnn/ (accessed Feb. 22, 2022.)
I also set up and created this blog with [Hugo](https://gohugo.io/) to document my progress and setup [Woodpecker CI](https://woodpecker-ci.org/) to do continuous testing and integration.

12
content/posts/week-5.md Normal file
View file

@ -0,0 +1,12 @@
---
title: "Week 5"
date: 2022-03-06T12:40:14+01:00
draft: false
---
# Starting to write a CNN
This week I started to implement what I had learnt about CNNs in [Week 4](../week-4/). At this point I hadn't designed a CNN architecture to implement, instead I wanted to have a running model regardless of performance just to see if I could implement one and understand it.
Half way through implementation, I decided to look back at the existing research papers on judging aesthetic judgement to see which aspects of their system and CNN were important to the task. While reading I saw that nearly all research papers on the topic used transfer learning instead of creating their own CNNs from scratch. At this point I stopped writing a CNN from scratch and decided to solve my problem using transfer learning instead. I followed a guide[^1] on implementing transfer learning in pytorch and another guide[^2][^3] on creating a regressive CNN model.
[^1]:A Rosebrock. "PyTorch: Transfer Learning and Image Classification". pyimagesearch.com. https://pyimagesearch.com/2021/10/11/pytorch-transfer-learning-and-image-classification/ (accessed Mar. 1, 2022.)
[^2]:A Rosebrock. "Regression with Keras". pyimagesearch.com. https://pyimagesearch.com/2019/01/21/regression-with-keras/ (accessed Feb. 22, 2022.)
[^3]:A Rosebrock. "Keras, Regression, and CNNs". pyimagesearch.com. https://pyimagesearch.com/2019/01/28/keras-regression-and-cnns/ (accessed Feb. 22, 2022.)

16
content/posts/week-6.md Normal file
View file

@ -0,0 +1,16 @@
---
title: "Week 6"
date: 2022-03-13T12:40:17+01:00
draft: false
---
This week I finished programming the basic CNN model using transfer learning. I decided to train it for 20 epochs to make sure there weren't any runtime errors in my code. As I don't own an Nvidia GPU (I have an AMD GPU), I couldn't make use of the pytorch version that utilised CUDA to speed up processing. There is a RocM version of pytorch for AMD GPUs[^1] but RocM isn't as mature as CUDA and only officially supports a small subset of Linux distributions. Therefore, for this model I trained on the COU for only 20 epochs just to make sure it ran successfully before trying to find some Nvidia compute.
[^1]: https://pytorch.org/blog/pytorch-for-amd-rocm-platform-now-available-as-python-package/
## Transfer learning model architecture
### Full
![Transfer learning architecture](/transfer-cnn-arch.svg)
### Simplified
![Simplified Transfer learning architecture](/transfer-cnn-arch-simpl.svg)
## Validation and train loss over 20 epochs
![plot of training and validation loss over 20 epochs](/20-epoch-plot.png)

16
content/posts/week-7.md Normal file
View file

@ -0,0 +1,16 @@
---
title: "Week 7"
date: 2022-03-20T12:40:18+01:00
draft: false
---
Now that I had successfully run my model without any runtime errors, the next step this week was finding some GPU compute so I can train my model on much more powerful hardware to accelerate the training.
My first idea was to use cloud computing. There are machine learning specific cloud technologies, but I didn't want to use these as I didn't want my code to be dependent on the specific ways cloud platforms want the code in. Instead, I wanted to get a general VM with an attached GPU where I could run my workloads manually. I had already written docker images that contained all the depencies of my code that I could deploy to these VMs to ensure a reproducible and portable environment.
First place I looked was [Linode](https://www.linode.com/products/gpu/). Although, after I contacted their support about it they said I needed at least $100 of transactions on my account in order to request access to their GPU instances. They also noted I could make a deposit of $100 to start using them straight away. I wasn't sure if my model was going to use up $100 to train yet so I didn't want to risk it.
I then looked to [Microsoft's Azure](https://azure.microsoft.com). I had used Azure during my industrial year and had previously passed the fundamentals and associate administrator exams for the platform so felt fairly confident in using it for my project. I ran into some issues I couldn't quite explain at the start of the week. For some reason no services were available for me to use. I couldn't use any VMs, create any networks or drives etc... Turns out I noticed that my UK account was defaulting to trying to create resources in the US which I didn't have access to. So I had to manually set my location to the UK in order to create any resources.
While I was trying to work out the issue with Azure, I looked at using [GCP](https://cloud.google.com). GCP automatically sets new accounts to have a quota of 0 for GPUs. Meaning you can't attach one to any VM. You can increase the quota which requires getting in contact with customer support. Within 10 minutes I got a response and my quota was increases by 1. I wrote [Terraform](https://www.terraform.io/) IaC (Infrastructure as Code) to automatically spin up and spin down cloud resources quickly.
At this point I realised my code wasn't very portable as it included hard-coded absolute paths among other things. I refactored a lot of my code in order to run it on any machine. I was also granted access to the university's GPU compute servers which allowed me to train my model without paying for cloud fees. To make sure my refactoring worked and that the GPU was actually being utilised during training, I rain the training script on the uni's GPU compute server for 20 epochs. It successfully finished in ~13 minutes.

30
content/posts/week-8.md Normal file
View file

@ -0,0 +1,30 @@
---
title: "Week 8"
date: 2022-03-27T13:13:48+01:00
draft: false
---
# Monday
Towards the end of last week ([Week 7](../week-7)), I managed to refactor my code in order to make it more portable. This allowed me to train my model on different machines. I ran my training script on the uni's GPU compute successfully for 20 epochs. The next stage was to train it for longer and analyse the results. On the Monday morning I adjusted the parameters of my training script to train for 2000 epochs instead.
# Tuesday
Tuesday afternoon the training had finished and I had a model that was trained on 2000 epochs. This gave me a day to analyse the results and do some rough predictions before my mid-project demo on the Wednesday.
## Training and validation loss graphs
![training and validation loss 20 epochs](/20-epoch-plot.png)
![training and validation loss 2000 epochs](/2000-epoch-plot.png)
As we can see from the 2000 Epochs graph, the loss seems to plateau at around 60 epochs. The training loss seems to even out with more accuracy than the validation loss. This means that our data isn't fully learning what I want it to. Also it's overfitting slightly as it's better at predicting the training set than the validation set. The variance in the validation set shows that the features it's decided to learn aren't the right features to confidently predict aesthetics in this dataset.
For the rest of the day I worked on my prediction script so I could use the model to predict new pictures. I also worked on my architecture diagrams and slides for the mid-project demo.
![images with prediction scores](/predictions.png)
Due to the nature of how I processed my images (resizing them to 32x32 and then saving them to a tensor then saving them to disk), my prediction script also displayed those down-sized images. This may have also effected the performance of the model.
# Wednesday
I spent most of Wednesday morning finishing my slides, diagrams and making example predictions using the prediction script.
![overall project architecture](/project-model.svg)
# Rest of week
I spent the rest of the week looking at the project's overall pipeline including the non-machine learning filtering. I also started to implement basic focus detection by looking at blur detection using the Laplacian operator[^1].
[^1]:https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/

BIN
public/20-epoch-plot.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/2000-epoch-plot.png (Stored with Git LFS) Normal file

Binary file not shown.

View file

@ -14,7 +14,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!-- <!--

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content=""> <meta name="description" content="">
@ -15,7 +15,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/categories/index.xml" title="MMP | Oscar Pocock" /> <link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/categories/index.xml" title="MMP | Oscar Pocock" />
@ -145,7 +145,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>

View file

@ -1 +1,10 @@
<!DOCTYPE html><html><head><title>https://mmp.oscar.blue/categories/</title><link rel="canonical" href="https://mmp.oscar.blue/categories/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://mmp.oscar.blue/categories/" /></head></html> <!DOCTYPE html>
<html lang="en">
<head>
<title>https://mmp.oscar.blue/categories/</title>
<link rel="canonical" href="https://mmp.oscar.blue/categories/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=https://mmp.oscar.blue/categories/">
</head>
</html>

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="This is the developer documentation. (Work-in-progress)"> <meta name="description" content="This is the developer documentation. (Work-in-progress)">
@ -15,7 +15,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/docs/developer/index.xml" title="MMP | Oscar Pocock" /> <link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/docs/developer/index.xml" title="MMP | Oscar Pocock" />
@ -145,7 +145,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content=""> <meta name="description" content="">
@ -15,7 +15,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/docs/index.xml" title="MMP | Oscar Pocock" /> <link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/docs/index.xml" title="MMP | Oscar Pocock" />
@ -145,7 +145,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="This is the user documentation. (Work-in-progress)"> <meta name="description" content="This is the user documentation. (Work-in-progress)">
@ -15,7 +15,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/docs/user/index.xml" title="MMP | Oscar Pocock" /> <link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/docs/user/index.xml" title="MMP | Oscar Pocock" />
@ -145,7 +145,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
'use strict';(function(){const e=document.querySelector("#book-search-input"),t=document.querySelector("#book-search-results");if(!e)return;e.addEventListener("focus",n),e.addEventListener("keyup",s),document.addEventListener("keypress",i);function i(t){if(e===document.activeElement)return;const n=String.fromCharCode(t.charCode);if(!a(n))return;e.focus(),t.preventDefault()}function a(t){const n=e.getAttribute("data-hotkeys")||'';return n.indexOf(t)>=0}function n(){e.removeEventListener("focus",n),e.required=!0,o("/flexsearch.min.js"),o("/en.search-data.min.7fa160935458996a6e342c79dcaee4fd59e7c35b67e065778352b0d790f6b7e6.js",function(){e.required=!1,s()})}function s(){for(;t.firstChild;)t.removeChild(t.firstChild);if(!e.value)return;const n=window.bookSearchIndex.search(e.value,10);n.forEach(function(e){const n=r("<li><a href></a><small></small></li>"),s=n.querySelector("a"),o=n.querySelector("small");s.href=e.href,s.textContent=e.title,o.textContent=e.section,t.appendChild(n)})}function o(t,n){const e=document.createElement("script");e.defer=!0,e.async=!1,e.src=t,e.onload=n,document.head.appendChild(e)}function r(t){const e=document.createElement("div");return e.innerHTML=t,e.firstChild}})()

View file

@ -0,0 +1 @@
'use strict';(function(){const e=document.querySelector("#book-search-input"),t=document.querySelector("#book-search-results");if(!e)return;e.addEventListener("focus",n),e.addEventListener("keyup",s),document.addEventListener("keypress",i);function i(t){if(e===document.activeElement)return;const n=String.fromCharCode(t.charCode);if(!a(n))return;e.focus(),t.preventDefault()}function a(t){const n=e.getAttribute("data-hotkeys")||'';return n.indexOf(t)>=0}function n(){e.removeEventListener("focus",n),e.required=!0,o("/flexsearch.min.js"),o("/en.search-data.min.3cdd632708ab5b87a1949e77a4e8038d26de63339156f8be996cb82fdd8a42dd.js",function(){e.required=!1,s()})}function s(){for(;t.firstChild;)t.removeChild(t.firstChild);if(!e.value)return;const n=window.bookSearchIndex.search(e.value,10);n.forEach(function(e){const n=r("<li><a href></a><small></small></li>"),s=n.querySelector("a"),o=n.querySelector("small");s.href=e.href,s.textContent=e.title,o.textContent=e.section,t.appendChild(n)})}function o(t,n){const e=document.createElement("script");e.defer=!0,e.async=!1,e.src=t,e.onload=n,document.head.appendChild(e)}function r(t){const e=document.createElement("div");return e.innerHTML=t,e.firstChild}})()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

After

Width:  |  Height:  |  Size: 128 B

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Autophotographer # This project aims to automate the process of selecting &ldquo;aesthetic&rdquo; images from a video feed."> <meta name="description" content="Autophotographer # This project aims to automate the process of selecting &ldquo;aesthetic&rdquo; images from a video feed.">
@ -15,7 +15,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/index.xml" title="MMP | Oscar Pocock" /> <link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/index.xml" title="MMP | Oscar Pocock" />
@ -145,7 +145,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>

View file

@ -5,15 +5,54 @@
<link>https://mmp.oscar.blue/</link> <link>https://mmp.oscar.blue/</link>
<description>Recent content in Homepage on MMP | Oscar Pocock</description> <description>Recent content in Homepage on MMP | Oscar Pocock</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Wed, 23 Feb 2022 12:46:59 +0000</lastBuildDate><atom:link href="https://mmp.oscar.blue/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Sun, 27 Mar 2022 13:13:48 +0100</lastBuildDate><atom:link href="https://mmp.oscar.blue/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Week 8</title>
<link>https://mmp.oscar.blue/posts/week-8/</link>
<pubDate>Sun, 27 Mar 2022 13:13:48 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-8/</guid>
<description>Monday # Towards the end of last week ( Week 7), I managed to refactor my code in order to make it more portable. This allowed me to train my model on different machines. I ran my training script on the uni&amp;rsquo;s GPU compute successfully for 20 epochs. The next stage was to train it for longer and analyse the results. On the Monday morning I adjusted the parameters of my training script to train for 2000 epochs instead.</description>
</item>
<item>
<title>Week 7</title>
<link>https://mmp.oscar.blue/posts/week-7/</link>
<pubDate>Sun, 20 Mar 2022 12:40:18 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-7/</guid>
<description>Now that I had successfully run my model without any runtime errors, the next step this week was finding some GPU compute so I can train my model on much more powerful hardware to accelerate the training.
My first idea was to use cloud computing. There are machine learning specific cloud technologies, but I didn&amp;rsquo;t want to use these as I didn&amp;rsquo;t want my code to be dependent on the specific ways cloud platforms want the code in.</description>
</item>
<item>
<title>Week 6</title>
<link>https://mmp.oscar.blue/posts/week-6/</link>
<pubDate>Sun, 13 Mar 2022 12:40:17 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-6/</guid>
<description>This week I finished programming the basic CNN model using transfer learning. I decided to train it for 20 epochs to make sure there weren&amp;rsquo;t any runtime errors in my code. As I don&amp;rsquo;t own an Nvidia GPU (I have an AMD GPU), I couldn&amp;rsquo;t make use of the pytorch version that utilised CUDA to speed up processing. There is a RocM version of pytorch for AMD GPUs1 but RocM isn&amp;rsquo;t as mature as CUDA and only officially supports a small subset of Linux distributions.</description>
</item>
<item>
<title>Week 5</title>
<link>https://mmp.oscar.blue/posts/week-5/</link>
<pubDate>Sun, 06 Mar 2022 12:40:14 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-5/</guid>
<description>Starting to write a CNN # This week I started to implement what I had learnt about CNNs in Week 4. At this point I hadn&amp;rsquo;t designed a CNN architecture to implement, instead I wanted to have a running model regardless of performance just to see if I could implement one and understand it.
Half way through implementation, I decided to look back at the existing research papers on judging aesthetic judgement to see which aspects of their system and CNN were important to the task.</description>
</item>
<item> <item>
<title>Week 4</title> <title>Week 4</title>
<link>https://mmp.oscar.blue/posts/week-4/</link> <link>https://mmp.oscar.blue/posts/week-4/</link>
<pubDate>Wed, 23 Feb 2022 12:46:59 +0000</pubDate> <pubDate>Sun, 27 Feb 2022 12:46:59 +0000</pubDate>
<guid>https://mmp.oscar.blue/posts/week-4/</guid> <guid>https://mmp.oscar.blue/posts/week-4/</guid>
<description>This week&amp;hellip; <description>This week I did some research into how to build a CNN from scratch, including the different type of layers, loss functions, learning rates, epochs and other core concepts.12
Work # Created blog Weekly 1:1 meeting # </description> I also set up and created this blog with Hugo to document my progress and setup Woodpecker CI to do continuous testing and integration.
deeplizard. &amp;ldquo;Convolutional Neural Networks (CNNs) explained.&amp;rdquo; (Dec. 9, 2017). Accessed: Feb. 22, 2022. [Online Video]. Available: https://youtube.</description>
</item> </item>
<item> <item>

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content=""> <meta name="description" content="">
@ -15,7 +15,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/posts/index.xml" title="MMP | Oscar Pocock" /> <link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/posts/index.xml" title="MMP | Oscar Pocock" />
@ -145,7 +145,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
@ -206,12 +206,102 @@ https://github.com/alex-shpak/hugo-book
<article class="markdown book-post">
<h2>
<a href="/posts/week-8/">Week 8</a>
</h2>
<h5>March 27, 2022</h5>
<p>Monday # Towards the end of last week ( Week 7), I managed to refactor my code in order to make it more portable. This allowed me to train my model on different machines. I ran my training script on the uni&rsquo;s GPU compute successfully for 20 epochs. The next stage was to train it for longer and analyse the results. On the Monday morning I adjusted the parameters of my training script to train for 2000 epochs instead.
<a href="/posts/week-8/">...</a>
</p>
</article>
<article class="markdown book-post">
<h2>
<a href="/posts/week-7/">Week 7</a>
</h2>
<h5>March 20, 2022</h5>
<p>Now that I had successfully run my model without any runtime errors, the next step this week was finding some GPU compute so I can train my model on much more powerful hardware to accelerate the training.
My first idea was to use cloud computing. There are machine learning specific cloud technologies, but I didn&rsquo;t want to use these as I didn&rsquo;t want my code to be dependent on the specific ways cloud platforms want the code in.
<a href="/posts/week-7/">...</a>
</p>
</article>
<article class="markdown book-post">
<h2>
<a href="/posts/week-6/">Week 6</a>
</h2>
<h5>March 13, 2022</h5>
<p>This week I finished programming the basic CNN model using transfer learning. I decided to train it for 20 epochs to make sure there weren&rsquo;t any runtime errors in my code. As I don&rsquo;t own an Nvidia GPU (I have an AMD GPU), I couldn&rsquo;t make use of the pytorch version that utilised CUDA to speed up processing. There is a RocM version of pytorch for AMD GPUs1 but RocM isn&rsquo;t as mature as CUDA and only officially supports a small subset of Linux distributions.
<a href="/posts/week-6/">...</a>
</p>
</article>
<article class="markdown book-post">
<h2>
<a href="/posts/week-5/">Week 5</a>
</h2>
<h5>March 6, 2022</h5>
<p>Starting to write a CNN # This week I started to implement what I had learnt about CNNs in Week 4. At this point I hadn&rsquo;t designed a CNN architecture to implement, instead I wanted to have a running model regardless of performance just to see if I could implement one and understand it.
Half way through implementation, I decided to look back at the existing research papers on judging aesthetic judgement to see which aspects of their system and CNN were important to the task.
<a href="/posts/week-5/">...</a>
</p>
</article>
<article class="markdown book-post"> <article class="markdown book-post">
<h2> <h2>
<a href="/posts/week-4/">Week 4</a> <a href="/posts/week-4/">Week 4</a>
</h2> </h2>
<h5>February 23, 2022</h5> <h5>February 27, 2022</h5>
@ -222,8 +312,11 @@ https://github.com/alex-shpak/hugo-book
<p>This week&hellip; <p>This week I did some research into how to build a CNN from scratch, including the different type of layers, loss functions, learning rates, epochs and other core concepts.12
Work # Created blog Weekly 1:1 meeting # I also set up and created this blog with Hugo to document my progress and setup Woodpecker CI to do continuous testing and integration.
deeplizard. &ldquo;Convolutional Neural Networks (CNNs) explained.&rdquo; (Dec. 9, 2017). Accessed: Feb. 22, 2022. [Online Video]. Available: https://youtube.
<a href="/posts/week-4/">...</a>
</p> </p>
</article> </article>

View file

@ -5,15 +5,54 @@
<link>https://mmp.oscar.blue/posts/</link> <link>https://mmp.oscar.blue/posts/</link>
<description>Recent content in Blog on MMP | Oscar Pocock</description> <description>Recent content in Blog on MMP | Oscar Pocock</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Wed, 23 Feb 2022 12:46:59 +0000</lastBuildDate><atom:link href="https://mmp.oscar.blue/posts/index.xml" rel="self" type="application/rss+xml" /> <lastBuildDate>Sun, 27 Mar 2022 13:13:48 +0100</lastBuildDate><atom:link href="https://mmp.oscar.blue/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Week 8</title>
<link>https://mmp.oscar.blue/posts/week-8/</link>
<pubDate>Sun, 27 Mar 2022 13:13:48 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-8/</guid>
<description>Monday # Towards the end of last week ( Week 7), I managed to refactor my code in order to make it more portable. This allowed me to train my model on different machines. I ran my training script on the uni&amp;rsquo;s GPU compute successfully for 20 epochs. The next stage was to train it for longer and analyse the results. On the Monday morning I adjusted the parameters of my training script to train for 2000 epochs instead.</description>
</item>
<item>
<title>Week 7</title>
<link>https://mmp.oscar.blue/posts/week-7/</link>
<pubDate>Sun, 20 Mar 2022 12:40:18 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-7/</guid>
<description>Now that I had successfully run my model without any runtime errors, the next step this week was finding some GPU compute so I can train my model on much more powerful hardware to accelerate the training.
My first idea was to use cloud computing. There are machine learning specific cloud technologies, but I didn&amp;rsquo;t want to use these as I didn&amp;rsquo;t want my code to be dependent on the specific ways cloud platforms want the code in.</description>
</item>
<item>
<title>Week 6</title>
<link>https://mmp.oscar.blue/posts/week-6/</link>
<pubDate>Sun, 13 Mar 2022 12:40:17 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-6/</guid>
<description>This week I finished programming the basic CNN model using transfer learning. I decided to train it for 20 epochs to make sure there weren&amp;rsquo;t any runtime errors in my code. As I don&amp;rsquo;t own an Nvidia GPU (I have an AMD GPU), I couldn&amp;rsquo;t make use of the pytorch version that utilised CUDA to speed up processing. There is a RocM version of pytorch for AMD GPUs1 but RocM isn&amp;rsquo;t as mature as CUDA and only officially supports a small subset of Linux distributions.</description>
</item>
<item>
<title>Week 5</title>
<link>https://mmp.oscar.blue/posts/week-5/</link>
<pubDate>Sun, 06 Mar 2022 12:40:14 +0100</pubDate>
<guid>https://mmp.oscar.blue/posts/week-5/</guid>
<description>Starting to write a CNN # This week I started to implement what I had learnt about CNNs in Week 4. At this point I hadn&amp;rsquo;t designed a CNN architecture to implement, instead I wanted to have a running model regardless of performance just to see if I could implement one and understand it.
Half way through implementation, I decided to look back at the existing research papers on judging aesthetic judgement to see which aspects of their system and CNN were important to the task.</description>
</item>
<item> <item>
<title>Week 4</title> <title>Week 4</title>
<link>https://mmp.oscar.blue/posts/week-4/</link> <link>https://mmp.oscar.blue/posts/week-4/</link>
<pubDate>Wed, 23 Feb 2022 12:46:59 +0000</pubDate> <pubDate>Sun, 27 Feb 2022 12:46:59 +0000</pubDate>
<guid>https://mmp.oscar.blue/posts/week-4/</guid> <guid>https://mmp.oscar.blue/posts/week-4/</guid>
<description>This week&amp;hellip; <description>This week I did some research into how to build a CNN from scratch, including the different type of layers, loss functions, learning rates, epochs and other core concepts.12
Work # Created blog Weekly 1:1 meeting # </description> I also set up and created this blog with Hugo to document my progress and setup Woodpecker CI to do continuous testing and integration.
deeplizard. &amp;ldquo;Convolutional Neural Networks (CNNs) explained.&amp;rdquo; (Dec. 9, 2017). Accessed: Feb. 22, 2022. [Online Video]. Available: https://youtube.</description>
</item> </item>
<item> <item>

View file

@ -1 +1,10 @@
<!DOCTYPE html><html><head><title>https://mmp.oscar.blue/posts/</title><link rel="canonical" href="https://mmp.oscar.blue/posts/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://mmp.oscar.blue/posts/" /></head></html> <!DOCTYPE html>
<html lang="en">
<head>
<title>https://mmp.oscar.blue/posts/</title>
<link rel="canonical" href="https://mmp.oscar.blue/posts/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=https://mmp.oscar.blue/posts/">
</head>
</html>

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="This week is the first week of the project. I researched academic papers, existing code and dataset relating to the topic of determining aesthetics. <meta name="description" content="This week is the first week of the project. I researched academic papers, existing code and dataset relating to the topic of determining aesthetics.
@ -23,7 +23,7 @@ Code # Image Quality Assessment - Convolutional Neural Networks to predict the
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!-- <!--
@ -152,7 +152,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="This week I set up my repositories and starting writing some basic code. <meta name="description" content="This week I set up my repositories and starting writing some basic code.
@ -19,7 +19,7 @@ Set up # Before starting any coding, I wanted to set up my remote git repositor
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!-- <!--
@ -148,7 +148,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
@ -227,59 +227,59 @@ https://github.com/alex-shpak/hugo-book
</h1> </h1>
<p>Towards the end of the week I put together some simple code to reduce the frame set. I used the OpenCV Python module to export the frames of a given video to an <code>output/</code> folder. The path of this folder is also stored in the <code>outputfolder</code> variable we see used on line 7.</p> <p>Towards the end of the week I put together some simple code to reduce the frame set. I used the OpenCV Python module to export the frames of a given video to an <code>output/</code> folder. The path of this folder is also stored in the <code>outputfolder</code> variable we see used on line 7.</p>
<p>Although this code is a first step at reducing the frames set - it doesn&rsquo;t give us much feedback about the frames that have been deleted or kept.</p> <p>Although this code is a first step at reducing the frames set - it doesn&rsquo;t give us much feedback about the frames that have been deleted or kept.</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> <div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> <table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1 <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
</span></code></pre></td> </span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> <td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">display_file_sizes</span>(): <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">display_file_sizes</span>():
<span style="color:#e6db74">&#34;&#34;&#34;Calculates the average frame filesize and deletes the frames lower </span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;&#34;&#34;Calculates the average frame filesize and deletes the frames lower
</span><span style="color:#e6db74">than the average </span></span></span><span style="display:flex;"><span><span style="color:#e6db74">than the average
</span><span style="color:#e6db74">&#34;&#34;&#34;</span> </span></span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;&#34;&#34;</span>
<span style="color:#75715e"># create an array storing the filesize of each frame</span> </span></span><span style="display:flex;"><span> <span style="color:#75715e"># create an array storing the filesize of each frame</span>
filesizes <span style="color:#f92672">=</span> [] </span></span><span style="display:flex;"><span> filesizes <span style="color:#f92672">=</span> []
<span style="color:#66d9ef">for</span> filename <span style="color:#f92672">in</span> os<span style="color:#f92672">.</span>listdir(outputfolder): </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> filename <span style="color:#f92672">in</span> os<span style="color:#f92672">.</span>listdir(outputfolder):
filepath <span style="color:#f92672">=</span> outputfolder <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;/&#34;</span> <span style="color:#f92672">+</span> filename </span></span><span style="display:flex;"><span> filepath <span style="color:#f92672">=</span> outputfolder <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;/&#34;</span> <span style="color:#f92672">+</span> filename
filesize <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>getsize(filepath) </span></span><span style="display:flex;"><span> filesize <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>getsize(filepath)
print(filepath <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;: &#34;</span> <span style="color:#f92672">+</span> str(filesize)) </span></span><span style="display:flex;"><span> print(filepath <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;: &#34;</span> <span style="color:#f92672">+</span> str(filesize))
filesizes<span style="color:#f92672">.</span>append(filesize) </span></span><span style="display:flex;"><span> filesizes<span style="color:#f92672">.</span>append(filesize)
</span></span><span style="display:flex;"><span>
<span style="color:#75715e"># work out average</span> </span></span><span style="display:flex;"><span> <span style="color:#75715e"># work out average</span>
average <span style="color:#f92672">=</span> sum(filesizes)<span style="color:#f92672">/</span>len(filesizes) </span></span><span style="display:flex;"><span> average <span style="color:#f92672">=</span> sum(filesizes)<span style="color:#f92672">/</span>len(filesizes)
print (<span style="color:#e6db74">&#34;Average is: &#34;</span> <span style="color:#f92672">+</span> str(average)) </span></span><span style="display:flex;"><span> print (<span style="color:#e6db74">&#34;Average is: &#34;</span> <span style="color:#f92672">+</span> str(average))
</span></span><span style="display:flex;"><span>
<span style="color:#75715e"># delete files below average</span> </span></span><span style="display:flex;"><span> <span style="color:#75715e"># delete files below average</span>
count <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span> </span></span><span style="display:flex;"><span> count <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>
<span style="color:#66d9ef">for</span> filename <span style="color:#f92672">in</span> os<span style="color:#f92672">.</span>listdir(outputfolder): </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> filename <span style="color:#f92672">in</span> os<span style="color:#f92672">.</span>listdir(outputfolder):
filepath <span style="color:#f92672">=</span> outputfolder <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;/&#34;</span> <span style="color:#f92672">+</span> filename </span></span><span style="display:flex;"><span> filepath <span style="color:#f92672">=</span> outputfolder <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;/&#34;</span> <span style="color:#f92672">+</span> filename
<span style="color:#66d9ef">if</span> filesizes[count] <span style="color:#f92672">&lt;</span> average: </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> filesizes[count] <span style="color:#f92672">&lt;</span> average:
<span style="color:#75715e"># print(filepath + &#34;: &#34; + str(filesizes[count]))</span> </span></span><span style="display:flex;"><span> <span style="color:#75715e"># print(filepath + &#34;: &#34; + str(filesizes[count]))</span>
os<span style="color:#f92672">.</span>remove(filepath) </span></span><span style="display:flex;"><span> os<span style="color:#f92672">.</span>remove(filepath)
count <span style="color:#f92672">+=</span> <span style="color:#ae81ff">1</span> </span></span><span style="display:flex;"><span> count <span style="color:#f92672">+=</span> <span style="color:#ae81ff">1</span>
</code></pre></td></tr></table> </span></span></code></pre></td></tr></table>
</div> </div>
</div><p>I didn&rsquo;t end up doing as much as I would have liked this week. I found myself preoccupied in other areas of my life and not putting enough emphasis on this project.</p> </div><p>I didn&rsquo;t end up doing as much as I would have liked this week. I found myself preoccupied in other areas of my life and not putting enough emphasis on this project.</p>
<h1 id="11-weekly-meeting"> <h1 id="11-weekly-meeting">

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Filming footage # At the start of the week I went into town to film some practise footage to work with later (up until this point I had been experimenting with footage limited by my bedroom walls). I took some basic vertical and horizontal footage of the town - no nature or breach footage yet. <meta name="description" content="Filming footage # At the start of the week I went into town to film some practise footage to work with later (up until this point I had been experimenting with footage limited by my bedroom walls). I took some basic vertical and horizontal footage of the town - no nature or breach footage yet.
@ -19,7 +19,7 @@ Gaining more useful information # I used the footage I had recorded at the star
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!-- <!--
@ -148,7 +148,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
@ -220,43 +220,43 @@ https://github.com/alex-shpak/hugo-book
<a class="anchor" href="#gaining-more-useful-information">#</a> <a class="anchor" href="#gaining-more-useful-information">#</a>
</h1> </h1>
<p>I used the footage I had recorded at the start of the week and revised my &ldquo;filesize&rdquo; code. I made a new function <code>order_frames_by_filesize()</code> which orders the frames by the filesize and prints the name of size of each frame in order.</p> <p>I used the footage I had recorded at the start of the week and revised my &ldquo;filesize&rdquo; code. I made a new function <code>order_frames_by_filesize()</code> which orders the frames by the filesize and prints the name of size of each frame in order.</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> <div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> <table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1 <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16 </span><span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
</span></code></pre></td> </span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> <td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-python" data-lang="python"><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">order_frames_by_filesize</span>(): <pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">order_frames_by_filesize</span>():
<span style="color:#e6db74">&#34;&#34;&#34;Order the frames by filesize and print the filenames and their sizes&#34;&#34;&#34;</span> </span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;&#34;&#34;Order the frames by filesize and print the filenames and their sizes&#34;&#34;&#34;</span>
frames <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>listdir(outputfolder) </span></span><span style="display:flex;"><span> frames <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>listdir(outputfolder)
</span></span><span style="display:flex;"><span>
<span style="color:#75715e"># sort the frames by their filesize</span> </span></span><span style="display:flex;"><span> <span style="color:#75715e"># sort the frames by their filesize</span>
frames <span style="color:#f92672">=</span> sorted(frames, </span></span><span style="display:flex;"><span> frames <span style="color:#f92672">=</span> sorted(frames,
key <span style="color:#f92672">=</span> <span style="color:#66d9ef">lambda</span> x: os<span style="color:#f92672">.</span>stat(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(outputfolder, x))<span style="color:#f92672">.</span>st_size, reverse <span style="color:#f92672">=</span> <span style="color:#66d9ef">True</span>) </span></span><span style="display:flex;"><span> key <span style="color:#f92672">=</span> <span style="color:#66d9ef">lambda</span> x: os<span style="color:#f92672">.</span>stat(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(outputfolder, x))<span style="color:#f92672">.</span>st_size, reverse <span style="color:#f92672">=</span> <span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>
<span style="color:#75715e"># print every frame and it&#39;s size in a human readable format</span> </span></span><span style="display:flex;"><span> <span style="color:#75715e"># print every frame and it&#39;s size in a human readable format</span>
<span style="color:#66d9ef">for</span> frame <span style="color:#f92672">in</span> frames: </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> frame <span style="color:#f92672">in</span> frames:
filesize <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>stat(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(outputfolder, frame))<span style="color:#f92672">.</span>st_size </span></span><span style="display:flex;"><span> filesize <span style="color:#f92672">=</span> os<span style="color:#f92672">.</span>stat(os<span style="color:#f92672">.</span>path<span style="color:#f92672">.</span>join(outputfolder, frame))<span style="color:#f92672">.</span>st_size
<span style="color:#66d9ef">if</span> filesize <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">1024</span>: </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span> filesize <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">1024</span>:
filesize <span style="color:#f92672">=</span> filesize <span style="color:#f92672">/</span> <span style="color:#ae81ff">1024</span> </span></span><span style="display:flex;"><span> filesize <span style="color:#f92672">=</span> filesize <span style="color:#f92672">/</span> <span style="color:#ae81ff">1024</span>
print(frame <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;: &#34;</span> <span style="color:#f92672">+</span> str(filesize) <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34; KB&#34;</span>) </span></span><span style="display:flex;"><span> print(frame <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;: &#34;</span> <span style="color:#f92672">+</span> str(filesize) <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34; KB&#34;</span>)
<span style="color:#66d9ef">else</span>: </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">else</span>:
print(frame <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;: &#34;</span> <span style="color:#f92672">+</span> str(filesize)) </span></span><span style="display:flex;"><span> print(frame <span style="color:#f92672">+</span> <span style="color:#e6db74">&#34;: &#34;</span> <span style="color:#f92672">+</span> str(filesize))
</code></pre></td></tr></table> </span></span></code></pre></td></tr></table>
</div> </div>
</div><h1 id="analysing-datasets"> </div><h1 id="analysing-datasets">
Analysing datasets Analysing datasets

View file

@ -2,24 +2,26 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="This week&hellip; <meta name="description" content="This week I did some research into how to build a CNN from scratch, including the different type of layers, loss functions, learning rates, epochs and other core concepts.12
Work # Created blog Weekly 1:1 meeting # "> I also set up and created this blog with Hugo to document my progress and setup Woodpecker CI to do continuous testing and integration.
deeplizard. &ldquo;Convolutional Neural Networks (CNNs) explained.&rdquo; (Dec. 9, 2017). Accessed: Feb. 22, 2022. [Online Video]. Available: https://youtube.">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Week 4" /> <meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Week 4" />
<meta property="og:description" content="This week&hellip; <meta property="og:description" content="This week I did some research into how to build a CNN from scratch, including the different type of layers, loss functions, learning rates, epochs and other core concepts.12
Work # Created blog Weekly 1:1 meeting # " /> I also set up and created this blog with Hugo to document my progress and setup Woodpecker CI to do continuous testing and integration.
deeplizard. &ldquo;Convolutional Neural Networks (CNNs) explained.&rdquo; (Dec. 9, 2017). Accessed: Feb. 22, 2022. [Online Video]. Available: https://youtube." />
<meta property="og:type" content="article" /> <meta property="og:type" content="article" />
<meta property="og:url" content="https://mmp.oscar.blue/posts/week-4/" /><meta property="article:section" content="posts" /> <meta property="og:url" content="https://mmp.oscar.blue/posts/week-4/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-02-23T12:46:59+00:00" /> <meta property="article:published_time" content="2022-02-27T12:46:59+00:00" />
<meta property="article:modified_time" content="2022-02-23T12:46:59+00:00" /> <meta property="article:modified_time" content="2022-02-27T12:46:59+00:00" />
<title>Week 4 | MMP | Oscar Pocock</title> <title>Week 4 | MMP | Oscar Pocock</title>
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!-- <!--
@ -148,7 +150,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
@ -177,12 +179,7 @@ https://github.com/alex-shpak/hugo-book
<aside class="hidden clearfix"> <aside class="hidden clearfix">
<nav id="TableOfContents"> <nav id="TableOfContents"></nav>
<ul>
<li><a href="#work">Work</a></li>
<li><a href="#weekly-11-meeting">Weekly 1:1 meeting</a></li>
</ul>
</nav>
@ -198,7 +195,7 @@ https://github.com/alex-shpak/hugo-book
<a href="/posts/week-4/">Week 4</a> <a href="/posts/week-4/">Week 4</a>
</h1> </h1>
<h5>February 23, 2022</h5> <h5>February 27, 2022</h5>
@ -208,18 +205,23 @@ https://github.com/alex-shpak/hugo-book
<p>This week&hellip;</p> <p>This week I did some research into how to build a CNN from scratch, including the different type of layers, loss functions, learning rates, epochs and other core concepts.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<h1 id="work"> <p>I also set up and created this blog with
Work <a href="https://gohugo.io/">Hugo</a> to document my progress and setup
<a class="anchor" href="#work">#</a> <a href="https://woodpecker-ci.org/">Woodpecker CI</a> to do continuous testing and integration.</p>
</h1> <section class="footnotes" role="doc-endnotes">
<ul> <hr>
<li>Created blog</li> <ol>
</ul> <li id="fn:1" role="doc-endnote">
<h1 id="weekly-11-meeting"> <p>deeplizard. &ldquo;Convolutional Neural Networks (CNNs) explained.&rdquo; (Dec. 9, 2017). Accessed: Feb. 22, 2022. [Online Video]. Available:
Weekly 1:1 meeting <a href="https://youtube.com/watch?v=YRhxdVk_sIs">https://youtube.com/watch?v=YRhxdVk_sIs</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
<a class="anchor" href="#weekly-11-meeting">#</a> </li>
</h1> <li id="fn:2" role="doc-endnote">
<p>A Rosebrock. &ldquo;PyTorch: Training your first Convolutional Neural Network (CNN)&rdquo;. pyimagesearch.com.
<a href="https://pyimagesearch.com/2021/07/19/pytorch-training-your-first-convolutional-neural-network-cnn/">https://pyimagesearch.com/2021/07/19/pytorch-training-your-first-convolutional-neural-network-cnn/</a> (accessed Feb. 22, 2022.)&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
</article> </article>
@ -254,12 +256,7 @@ https://github.com/alex-shpak/hugo-book
<div class="book-toc-content"> <div class="book-toc-content">
<nav id="TableOfContents"> <nav id="TableOfContents"></nav>
<ul>
<li><a href="#work">Work</a></li>
<li><a href="#weekly-11-meeting">Weekly 1:1 meeting</a></li>
</ul>
</nav>

View file

@ -0,0 +1,296 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Starting to write a CNN # This week I started to implement what I had learnt about CNNs in Week 4. At this point I hadn&rsquo;t designed a CNN architecture to implement, instead I wanted to have a running model regardless of performance just to see if I could implement one and understand it.
Half way through implementation, I decided to look back at the existing research papers on judging aesthetic judgement to see which aspects of their system and CNN were important to the task.">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Week 5" />
<meta property="og:description" content="Starting to write a CNN # This week I started to implement what I had learnt about CNNs in Week 4. At this point I hadn&rsquo;t designed a CNN architecture to implement, instead I wanted to have a running model regardless of performance just to see if I could implement one and understand it.
Half way through implementation, I decided to look back at the existing research papers on judging aesthetic judgement to see which aspects of their system and CNN were important to the task." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://mmp.oscar.blue/posts/week-5/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-03-06T12:40:14+01:00" />
<meta property="article:modified_time" content="2022-03-06T12:40:14+01:00" />
<title>Week 5 | MMP | Oscar Pocock</title>
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a href="/"><span>MMP | Oscar Pocock</span>
</a>
</h2>
<div class="book-search">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<ul>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/developer/" class="">Developer Documentation</a>
<ul>
</ul>
</li>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/user/" class="">User Documentation</a>
<ul>
</ul>
</li>
</ul>
<ul>
<li>
<a href="/posts/" >
Blog
</a>
</li>
<li>
<a href="https://teaching.dcs.aber.ac.uk/mmp" target="_blank" rel="noopener">
Aberystwyth MMP Site
</a>
</li>
<li>
<a href="https://git.oscar.blue" target="_blank" rel="noopener">
Source Code
</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<strong>Week 5</strong>
<label for="toc-control">
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents">
<ul>
<li><a href="#starting-to-write-a-cnn">Starting to write a CNN</a></li>
</ul>
</nav>
</aside>
</header>
<article class="markdown">
<h1>
<a href="/posts/week-5/">Week 5</a>
</h1>
<h5>March 6, 2022</h5>
<h1 id="starting-to-write-a-cnn">
Starting to write a CNN
<a class="anchor" href="#starting-to-write-a-cnn">#</a>
</h1>
<p>This week I started to implement what I had learnt about CNNs in
<a href="../week-4/">Week 4</a>. At this point I hadn&rsquo;t designed a CNN architecture to implement, instead I wanted to have a running model regardless of performance just to see if I could implement one and understand it.</p>
<p>Half way through implementation, I decided to look back at the existing research papers on judging aesthetic judgement to see which aspects of their system and CNN were important to the task. While reading I saw that nearly all research papers on the topic used transfer learning instead of creating their own CNNs from scratch. At this point I stopped writing a CNN from scratch and decided to solve my problem using transfer learning instead. I followed a guide<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> on implementing transfer learning in pytorch and another guide<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> on creating a regressive CNN model.</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>A Rosebrock. &ldquo;PyTorch: Transfer Learning and Image Classification&rdquo;. pyimagesearch.com.
<a href="https://pyimagesearch.com/2021/10/11/pytorch-transfer-learning-and-image-classification/">https://pyimagesearch.com/2021/10/11/pytorch-transfer-learning-and-image-classification/</a> (accessed Mar. 1, 2022.)&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>A Rosebrock. &ldquo;Regression with Keras&rdquo;. pyimagesearch.com.
<a href="https://pyimagesearch.com/2019/01/21/regression-with-keras/">https://pyimagesearch.com/2019/01/21/regression-with-keras/</a> (accessed Feb. 22, 2022.)&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p>A Rosebrock. &ldquo;Keras, Regression, and CNNs&rdquo;. pyimagesearch.com.
<a href="https://pyimagesearch.com/2019/01/28/keras-regression-and-cnns/">https://pyimagesearch.com/2019/01/28/keras-regression-and-cnns/</a> (accessed Feb. 22, 2022.)&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents">
<ul>
<li><a href="#starting-to-write-a-cnn">Starting to write a CNN</a></li>
</ul>
</nav>
</div>
</aside>
</main>
</body>
</html>

View file

@ -0,0 +1,322 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="This week I finished programming the basic CNN model using transfer learning. I decided to train it for 20 epochs to make sure there weren&rsquo;t any runtime errors in my code. As I don&rsquo;t own an Nvidia GPU (I have an AMD GPU), I couldn&rsquo;t make use of the pytorch version that utilised CUDA to speed up processing. There is a RocM version of pytorch for AMD GPUs1 but RocM isn&rsquo;t as mature as CUDA and only officially supports a small subset of Linux distributions.">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Week 6" />
<meta property="og:description" content="This week I finished programming the basic CNN model using transfer learning. I decided to train it for 20 epochs to make sure there weren&rsquo;t any runtime errors in my code. As I don&rsquo;t own an Nvidia GPU (I have an AMD GPU), I couldn&rsquo;t make use of the pytorch version that utilised CUDA to speed up processing. There is a RocM version of pytorch for AMD GPUs1 but RocM isn&rsquo;t as mature as CUDA and only officially supports a small subset of Linux distributions." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://mmp.oscar.blue/posts/week-6/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-03-13T12:40:17+01:00" />
<meta property="article:modified_time" content="2022-03-13T12:40:17+01:00" />
<title>Week 6 | MMP | Oscar Pocock</title>
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a href="/"><span>MMP | Oscar Pocock</span>
</a>
</h2>
<div class="book-search">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<ul>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/developer/" class="">Developer Documentation</a>
<ul>
</ul>
</li>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/user/" class="">User Documentation</a>
<ul>
</ul>
</li>
</ul>
<ul>
<li>
<a href="/posts/" >
Blog
</a>
</li>
<li>
<a href="https://teaching.dcs.aber.ac.uk/mmp" target="_blank" rel="noopener">
Aberystwyth MMP Site
</a>
</li>
<li>
<a href="https://git.oscar.blue" target="_blank" rel="noopener">
Source Code
</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<strong>Week 6</strong>
<label for="toc-control">
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents">
<ul>
<li>
<ul>
<li><a href="#transfer-learning-model-architecture">Transfer learning model architecture</a>
<ul>
<li><a href="#full">Full</a></li>
<li><a href="#simplified">Simplified</a></li>
</ul>
</li>
<li><a href="#validation-and-train-loss-over-20-epochs">Validation and train loss over 20 epochs</a></li>
</ul>
</li>
</ul>
</nav>
</aside>
</header>
<article class="markdown">
<h1>
<a href="/posts/week-6/">Week 6</a>
</h1>
<h5>March 13, 2022</h5>
<p>This week I finished programming the basic CNN model using transfer learning. I decided to train it for 20 epochs to make sure there weren&rsquo;t any runtime errors in my code. As I don&rsquo;t own an Nvidia GPU (I have an AMD GPU), I couldn&rsquo;t make use of the pytorch version that utilised CUDA to speed up processing. There is a RocM version of pytorch for AMD GPUs<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> but RocM isn&rsquo;t as mature as CUDA and only officially supports a small subset of Linux distributions. Therefore, for this model I trained on the COU for only 20 epochs just to make sure it ran successfully before trying to find some Nvidia compute.</p>
<h2 id="transfer-learning-model-architecture">
Transfer learning model architecture
<a class="anchor" href="#transfer-learning-model-architecture">#</a>
</h2>
<h3 id="full">
Full
<a class="anchor" href="#full">#</a>
</h3>
<p>
<img src="/transfer-cnn-arch.svg" alt="Transfer learning architecture" /></p>
<h3 id="simplified">
Simplified
<a class="anchor" href="#simplified">#</a>
</h3>
<p>
<img src="/transfer-cnn-arch-simpl.svg" alt="Simplified Transfer learning architecture" /></p>
<h2 id="validation-and-train-loss-over-20-epochs">
Validation and train loss over 20 epochs
<a class="anchor" href="#validation-and-train-loss-over-20-epochs">#</a>
</h2>
<p>
<img src="/20-epoch-plot.png" alt="plot of training and validation loss over 20 epochs" /></p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>
<a href="https://pytorch.org/blog/pytorch-for-amd-rocm-platform-now-available-as-python-package/">https://pytorch.org/blog/pytorch-for-amd-rocm-platform-now-available-as-python-package/</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents">
<ul>
<li>
<ul>
<li><a href="#transfer-learning-model-architecture">Transfer learning model architecture</a>
<ul>
<li><a href="#full">Full</a></li>
<li><a href="#simplified">Simplified</a></li>
</ul>
</li>
<li><a href="#validation-and-train-loss-over-20-epochs">Validation and train loss over 20 epochs</a></li>
</ul>
</li>
</ul>
</nav>
</div>
</aside>
</main>
</body>
</html>

View file

@ -0,0 +1,274 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Now that I had successfully run my model without any runtime errors, the next step this week was finding some GPU compute so I can train my model on much more powerful hardware to accelerate the training.
My first idea was to use cloud computing. There are machine learning specific cloud technologies, but I didn&rsquo;t want to use these as I didn&rsquo;t want my code to be dependent on the specific ways cloud platforms want the code in.">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Week 7" />
<meta property="og:description" content="Now that I had successfully run my model without any runtime errors, the next step this week was finding some GPU compute so I can train my model on much more powerful hardware to accelerate the training.
My first idea was to use cloud computing. There are machine learning specific cloud technologies, but I didn&rsquo;t want to use these as I didn&rsquo;t want my code to be dependent on the specific ways cloud platforms want the code in." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://mmp.oscar.blue/posts/week-7/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-03-20T12:40:18+01:00" />
<meta property="article:modified_time" content="2022-03-20T12:40:18+01:00" />
<title>Week 7 | MMP | Oscar Pocock</title>
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a href="/"><span>MMP | Oscar Pocock</span>
</a>
</h2>
<div class="book-search">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<ul>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/developer/" class="">Developer Documentation</a>
<ul>
</ul>
</li>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/user/" class="">User Documentation</a>
<ul>
</ul>
</li>
</ul>
<ul>
<li>
<a href="/posts/" >
Blog
</a>
</li>
<li>
<a href="https://teaching.dcs.aber.ac.uk/mmp" target="_blank" rel="noopener">
Aberystwyth MMP Site
</a>
</li>
<li>
<a href="https://git.oscar.blue" target="_blank" rel="noopener">
Source Code
</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<strong>Week 7</strong>
<label for="toc-control">
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents"></nav>
</aside>
</header>
<article class="markdown">
<h1>
<a href="/posts/week-7/">Week 7</a>
</h1>
<h5>March 20, 2022</h5>
<p>Now that I had successfully run my model without any runtime errors, the next step this week was finding some GPU compute so I can train my model on much more powerful hardware to accelerate the training.</p>
<p>My first idea was to use cloud computing. There are machine learning specific cloud technologies, but I didn&rsquo;t want to use these as I didn&rsquo;t want my code to be dependent on the specific ways cloud platforms want the code in. Instead, I wanted to get a general VM with an attached GPU where I could run my workloads manually. I had already written docker images that contained all the depencies of my code that I could deploy to these VMs to ensure a reproducible and portable environment.</p>
<p>First place I looked was
<a href="https://www.linode.com/products/gpu/">Linode</a>. Although, after I contacted their support about it they said I needed at least $100 of transactions on my account in order to request access to their GPU instances. They also noted I could make a deposit of $100 to start using them straight away. I wasn&rsquo;t sure if my model was going to use up $100 to train yet so I didn&rsquo;t want to risk it.</p>
<p>I then looked to
<a href="https://azure.microsoft.com">Microsoft&rsquo;s Azure</a>. I had used Azure during my industrial year and had previously passed the fundamentals and associate administrator exams for the platform so felt fairly confident in using it for my project. I ran into some issues I couldn&rsquo;t quite explain at the start of the week. For some reason no services were available for me to use. I couldn&rsquo;t use any VMs, create any networks or drives etc&hellip; Turns out I noticed that my UK account was defaulting to trying to create resources in the US which I didn&rsquo;t have access to. So I had to manually set my location to the UK in order to create any resources.</p>
<p>While I was trying to work out the issue with Azure, I looked at using
<a href="https://cloud.google.com">GCP</a>. GCP automatically sets new accounts to have a quota of 0 for GPUs. Meaning you can&rsquo;t attach one to any VM. You can increase the quota which requires getting in contact with customer support. Within 10 minutes I got a response and my quota was increases by 1. I wrote
<a href="https://www.terraform.io/">Terraform</a> IaC (Infrastructure as Code) to automatically spin up and spin down cloud resources quickly.</p>
<p>At this point I realised my code wasn&rsquo;t very portable as it included hard-coded absolute paths among other things. I refactored a lot of my code in order to run it on any machine. I was also granted access to the university&rsquo;s GPU compute servers which allowed me to train my model without paying for cloud fees. To make sure my refactoring worked and that the GPU was actually being utilised during training, I rain the training script on the uni&rsquo;s GPU compute server for 20 epochs. It successfully finished in ~13 minutes.</p>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents"></nav>
</div>
</aside>
</main>
</body>
</html>

View file

@ -0,0 +1,329 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Monday # Towards the end of last week ( Week 7), I managed to refactor my code in order to make it more portable. This allowed me to train my model on different machines. I ran my training script on the uni&rsquo;s GPU compute successfully for 20 epochs. The next stage was to train it for longer and analyse the results. On the Monday morning I adjusted the parameters of my training script to train for 2000 epochs instead.">
<meta name="theme-color" content="#FFFFFF"><meta property="og:title" content="Week 8" />
<meta property="og:description" content="Monday # Towards the end of last week ( Week 7), I managed to refactor my code in order to make it more portable. This allowed me to train my model on different machines. I ran my training script on the uni&rsquo;s GPU compute successfully for 20 epochs. The next stage was to train it for longer and analyse the results. On the Monday morning I adjusted the parameters of my training script to train for 2000 epochs instead." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://mmp.oscar.blue/posts/week-8/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-03-27T13:13:48+01:00" />
<meta property="article:modified_time" content="2022-03-27T13:13:48+01:00" />
<title>Week 8 | MMP | Oscar Pocock</title>
<link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<!--
Made with Book Theme
https://github.com/alex-shpak/hugo-book
-->
</head>
<body dir="ltr">
<input type="checkbox" class="hidden toggle" id="menu-control" />
<input type="checkbox" class="hidden toggle" id="toc-control" />
<main class="container flex">
<aside class="book-menu">
<div class="book-menu-content">
<nav>
<h2 class="book-brand">
<a href="/"><span>MMP | Oscar Pocock</span>
</a>
</h2>
<div class="book-search">
<input type="text" id="book-search-input" placeholder="Search" aria-label="Search" maxlength="64" data-hotkeys="s/" />
<div class="book-search-spinner hidden"></div>
<ul id="book-search-results"></ul>
</div>
<ul>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/developer/" class="">Developer Documentation</a>
<ul>
</ul>
</li>
<li class="book-section-flat" >
<a href="https://mmp.oscar.blue/docs/user/" class="">User Documentation</a>
<ul>
</ul>
</li>
</ul>
<ul>
<li>
<a href="/posts/" >
Blog
</a>
</li>
<li>
<a href="https://teaching.dcs.aber.ac.uk/mmp" target="_blank" rel="noopener">
Aberystwyth MMP Site
</a>
</li>
<li>
<a href="https://git.oscar.blue" target="_blank" rel="noopener">
Source Code
</a>
</li>
</ul>
</nav>
<script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>
</div>
</aside>
<div class="book-page">
<header class="book-header">
<div class="flex align-center justify-between">
<label for="menu-control">
<img src="/svg/menu.svg" class="book-icon" alt="Menu" />
</label>
<strong>Week 8</strong>
<label for="toc-control">
<img src="/svg/toc.svg" class="book-icon" alt="Table of Contents" />
</label>
</div>
<aside class="hidden clearfix">
<nav id="TableOfContents">
<ul>
<li><a href="#monday">Monday</a></li>
<li><a href="#tuesday">Tuesday</a>
<ul>
<li><a href="#training-and-validation-loss-graphs">Training and validation loss graphs</a></li>
</ul>
</li>
<li><a href="#wednesday">Wednesday</a></li>
<li><a href="#rest-of-week">Rest of week</a></li>
</ul>
</nav>
</aside>
</header>
<article class="markdown">
<h1>
<a href="/posts/week-8/">Week 8</a>
</h1>
<h5>March 27, 2022</h5>
<h1 id="monday">
Monday
<a class="anchor" href="#monday">#</a>
</h1>
<p>Towards the end of last week (
<a href="../week-7">Week 7</a>), I managed to refactor my code in order to make it more portable. This allowed me to train my model on different machines. I ran my training script on the uni&rsquo;s GPU compute successfully for 20 epochs. The next stage was to train it for longer and analyse the results. On the Monday morning I adjusted the parameters of my training script to train for 2000 epochs instead.</p>
<h1 id="tuesday">
Tuesday
<a class="anchor" href="#tuesday">#</a>
</h1>
<p>Tuesday afternoon the training had finished and I had a model that was trained on 2000 epochs. This gave me a day to analyse the results and do some rough predictions before my mid-project demo on the Wednesday.</p>
<h2 id="training-and-validation-loss-graphs">
Training and validation loss graphs
<a class="anchor" href="#training-and-validation-loss-graphs">#</a>
</h2>
<p>
<img src="/20-epoch-plot.png" alt="training and validation loss 20 epochs" />
<img src="/2000-epoch-plot.png" alt="training and validation loss 2000 epochs" /></p>
<p>As we can see from the 2000 Epochs graph, the loss seems to plateau at around 60 epochs. The training loss seems to even out with more accuracy than the validation loss. This means that our data isn&rsquo;t fully learning what I want it to. Also it&rsquo;s overfitting slightly as it&rsquo;s better at predicting the training set than the validation set. The variance in the validation set shows that the features it&rsquo;s decided to learn aren&rsquo;t the right features to confidently predict aesthetics in this dataset.</p>
<p>For the rest of the day I worked on my prediction script so I could use the model to predict new pictures. I also worked on my architecture diagrams and slides for the mid-project demo.</p>
<p>
<img src="/predictions.png" alt="images with prediction scores" /></p>
<p>Due to the nature of how I processed my images (resizing them to 32x32 and then saving them to a tensor then saving them to disk), my prediction script also displayed those down-sized images. This may have also effected the performance of the model.</p>
<h1 id="wednesday">
Wednesday
<a class="anchor" href="#wednesday">#</a>
</h1>
<p>I spent most of Wednesday morning finishing my slides, diagrams and making example predictions using the prediction script.</p>
<p>
<img src="/project-model.svg" alt="overall project architecture" /></p>
<h1 id="rest-of-week">
Rest of week
<a class="anchor" href="#rest-of-week">#</a>
</h1>
<p>I spent the rest of the week looking at the project&rsquo;s overall pipeline including the non-machine learning filtering. I also started to implement basic focus detection by looking at blur detection using the Laplacian operator<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>
<a href="https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/">https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
</article>
<footer class="book-footer">
<div class="flex flex-wrap justify-between">
</div>
</footer>
<div class="book-comments">
</div>
<label for="menu-control" class="hidden book-menu-overlay"></label>
</div>
<aside class="book-toc">
<div class="book-toc-content">
<nav id="TableOfContents">
<ul>
<li><a href="#monday">Monday</a></li>
<li><a href="#tuesday">Tuesday</a>
<ul>
<li><a href="#training-and-validation-loss-graphs">Training and validation loss graphs</a></li>
</ul>
</li>
<li><a href="#wednesday">Wednesday</a></li>
<li><a href="#rest-of-week">Rest of week</a></li>
</ul>
</nav>
</div>
</aside>
</main>
</body>
</html>

BIN
public/predictions.png (Stored with Git LFS) Normal file

Binary file not shown.

3962
public/project-model.svg Normal file

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 140 KiB

View file

@ -7,13 +7,25 @@
<loc>https://mmp.oscar.blue/docs/user/</loc> <loc>https://mmp.oscar.blue/docs/user/</loc>
</url><url> </url><url>
<loc>https://mmp.oscar.blue/posts/</loc> <loc>https://mmp.oscar.blue/posts/</loc>
<lastmod>2022-02-23T12:46:59+00:00</lastmod> <lastmod>2022-03-27T13:13:48+01:00</lastmod>
</url><url> </url><url>
<loc>https://mmp.oscar.blue/</loc> <loc>https://mmp.oscar.blue/</loc>
<lastmod>2022-02-23T12:46:59+00:00</lastmod> <lastmod>2022-03-27T13:13:48+01:00</lastmod>
</url><url>
<loc>https://mmp.oscar.blue/posts/week-8/</loc>
<lastmod>2022-03-27T13:13:48+01:00</lastmod>
</url><url>
<loc>https://mmp.oscar.blue/posts/week-7/</loc>
<lastmod>2022-03-20T12:40:18+01:00</lastmod>
</url><url>
<loc>https://mmp.oscar.blue/posts/week-6/</loc>
<lastmod>2022-03-13T12:40:17+01:00</lastmod>
</url><url>
<loc>https://mmp.oscar.blue/posts/week-5/</loc>
<lastmod>2022-03-06T12:40:14+01:00</lastmod>
</url><url> </url><url>
<loc>https://mmp.oscar.blue/posts/week-4/</loc> <loc>https://mmp.oscar.blue/posts/week-4/</loc>
<lastmod>2022-02-23T12:46:59+00:00</lastmod> <lastmod>2022-02-27T12:46:59+00:00</lastmod>
</url><url> </url><url>
<loc>https://mmp.oscar.blue/posts/week-3/</loc> <loc>https://mmp.oscar.blue/posts/week-3/</loc>
<lastmod>2022-02-20T12:46:55+00:00</lastmod> <lastmod>2022-02-20T12:46:55+00:00</lastmod>

View file

@ -2,7 +2,7 @@
<html lang="en" dir="ltr"> <html lang="en" dir="ltr">
<head> <head>
<meta name="generator" content="Hugo 0.92.2" /> <meta name="generator" content="Hugo 0.95.0" />
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content=""> <meta name="description" content="">
@ -15,7 +15,7 @@
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<link rel="icon" href="/favicon.png" type="image/x-icon"> <link rel="icon" href="/favicon.png" type="image/x-icon">
<link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8="> <link rel="stylesheet" href="/book.min.68be0b7a9674f2a612ce0e9b2e9447ff4b7ac96546e06b642bfd3ded0ca490ef.css" integrity="sha256-aL4LepZ08qYSzg6bLpRH/0t6yWVG4GtkK/097QykkO8=">
<script defer src="/en.search.min.80be17279d14dad4bbcfd127989995f2186e0298e7d5efb2330c1ffbda3a4044.js" integrity="sha256-gL4XJ50U2tS7z9EnmJmV8hhuApjn1e&#43;yMwwf&#43;9o6QEQ="></script> <script defer src="/en.search.min.6bd18a0f048eff9ca273fd5ac40fe7159f145a30edf28a0847cab90265bd241a.js" integrity="sha256-a9GKDwSO/5yic/1axA/nFZ8UWjDt8ooIR8q5AmW9JBo="></script>
<script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script> <script defer src="/sw.min.6f6f90fcb8eb1c49ec389838e6b801d0de19430b8e516902f8d75c3c8bd98739.js" integrity="sha256-b2&#43;Q/LjrHEnsOJg45rgB0N4ZQwuOUWkC&#43;NdcPIvZhzk="></script>
<link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/tags/index.xml" title="MMP | Oscar Pocock" /> <link rel="alternate" type="application/rss+xml" href="https://mmp.oscar.blue/tags/index.xml" title="MMP | Oscar Pocock" />
@ -145,7 +145,7 @@ https://github.com/alex-shpak/hugo-book
<script>(function(){var a=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(b){localStorage.setItem("menu.scrollTop",a.scrollTop)}),a.scrollTop=localStorage.getItem("menu.scrollTop")})()</script> <script>(function(){var e=document.querySelector("aside.book-menu nav");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script>

View file

@ -1 +1,10 @@
<!DOCTYPE html><html><head><title>https://mmp.oscar.blue/tags/</title><link rel="canonical" href="https://mmp.oscar.blue/tags/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://mmp.oscar.blue/tags/" /></head></html> <!DOCTYPE html>
<html lang="en">
<head>
<title>https://mmp.oscar.blue/tags/</title>
<link rel="canonical" href="https://mmp.oscar.blue/tags/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=https://mmp.oscar.blue/tags/">
</head>
</html>

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 112 KiB

6675
public/transfer-cnn-arch.svg Normal file

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 272 KiB

BIN
static/20-epoch-plot.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/2000-epoch-plot.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/predictions.png (Stored with Git LFS) Normal file

Binary file not shown.

3962
static/project-model.svg Normal file

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 140 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 112 KiB

6675
static/transfer-cnn-arch.svg Normal file

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 272 KiB