From 91744bc874ea2e1a871b8f5caa96b3da2f1c3f94 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Wed, 9 Jun 2021 15:41:45 +0200 Subject: [PATCH 1/3] [ADD] commetns --- exercises/Jupyter notebook CVML.ipynb | 51 ++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/exercises/Jupyter notebook CVML.ipynb b/exercises/Jupyter notebook CVML.ipynb index 3f2b2d6..f2b45d5 100644 --- a/exercises/Jupyter notebook CVML.ipynb +++ b/exercises/Jupyter notebook CVML.ipynb @@ -2457,6 +2457,7 @@ } ], "source": [ + "#laad image in en haal de alpha channel eraf\n", "img2 = mpimg.imread('../data/imgs/training/sem/6.png')\n", "img3 = img2[:,:,:3]\n", "img3.shape\n", @@ -2470,6 +2471,7 @@ "metadata": {}, "outputs": [], "source": [ + "# maak image data generator objecten\n", "train = ImageDataGenerator()\n", "validation = ImageDataGenerator()" ] @@ -2490,6 +2492,14 @@ } ], "source": [ + "\"\"\"\n", + "maak de datasets aan en lees fotos in, we gebruiken een target size van \n", + "200 bij 200, met een batch size van 3 omdat we een vrij kleine dataset\n", + "hebben. We gebruiken binary als class mode omdat we maar 2 classes hebben\n", + "(lars en sem)\n", + "\"\"\"\n", + "\n", + "\n", "train_dataset = train.flow_from_directory('../data/imgs/training',\n", " target_size=(200,200),\n", " batch_size=3,\n", @@ -2519,6 +2529,7 @@ } ], "source": [ + "# laat de indices van de classes zien\n", "train_dataset.class_indices" ] }, @@ -2541,6 +2552,7 @@ } ], "source": [ + "# hier kunnen we zien hoeveel 'lars' classes zijn en hoeveel 'sem'\n", "train_dataset.classes" ] }, @@ -2551,23 +2563,60 @@ "metadata": {}, "outputs": [], "source": [ + "# maak een sequentieel model aan\n", "model = tf.keras.models.Sequential()\n", - "\n", + "\"\"\"\n", + "voeg een convolutional layer toe met 16 filters, en een filter size van 3x3,\n", + "en de relu activation function. Ook heeft het een input shape van 200x200\n", + "en 3 lagen omdat we 3 channels hebben.\n", + "Voeg daarna een maxpool laag toe met een stride van kernel van 2x2\n", + "\"\"\"\n", "model.add(tf.keras.layers.Conv2D(16,(3,3),activation='relu',\n", " input_shape=(200,200,3)))\n", "model.add(tf.keras.layers.MaxPool2D(2,2))\n", "\n", + "\"\"\"\n", + "voeg een convolutional layer toe met 32 filters, en een filter size van 3x3,\n", + "en de relu activation function. Ook heeft het een input shape van 200x200\n", + "en 3 lagen omdat we 3 channels hebben.\n", + "Voeg daarna een maxpool laag toe met een stride van kernel van 2x2\n", + "\"\"\"\n", "model.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu'))\n", "model.add(tf.keras.layers.MaxPool2D(2,2))\n", "\n", + "\"\"\"\n", + "voeg een convolutional layer toe met 64 filters, en een filter size van 3x3,\n", + "en de relu activation function. Ook heeft het een input shape van 200x200\n", + "en 3 lagen omdat we 3 channels hebben.\n", + "Voeg daarna een maxpool laag toe met een stride van kernel van 2x2\n", + "\"\"\"\n", "model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu'))\n", "model.add(tf.keras.layers.MaxPool2D(2,2))\n", "\n", + "\"\"\"\n", + "voeg een convolutional layer toe met 128 filters, en een filter size van 3x3,\n", + "en de relu activation function. Ook heeft het een input shape van 200x200\n", + "en 3 lagen omdat we 3 channels hebben.\n", + "Voeg daarna een maxpool laag toe met een stride van kernel van 2x2\n", + "\"\"\"\n", "model.add(tf.keras.layers.Conv2D(128,(3,3),activation='relu'))\n", "model.add(tf.keras.layers.MaxPool2D(2,2))\n", "\n", + "\"\"\"\n", + "voeg een flatten laag toe die het resultaat flattent zodat alle lagen achter\n", + "elkaar gezet worden en ze gebruikt kunnen worden als input voor de volgende\n", + "dense laag.\n", + "\"\"\"\n", "model.add(tf.keras.layers.Flatten())\n", + "\n", + "\"\"\"\n", + "voeg een dense laag toe met 512 outputs die de relu activatie functie gebruikt.\n", + "Dit wordt gedaan omdat deze laag dan fully connected is en zodat de volgende\n", + "laag een prediction kan doen met de sigmoid activatiefunctie.\n", + "\"\"\"\n", "model.add(tf.keras.layers.Dense(512,activation='relu'))\n", + "\n", + "# voeg een dense layer toe met 1 output die als result gebruikt zal worden\n", "model.add(tf.keras.layers.Dense(1,activation='sigmoid'))" ] }, From 365b2b27035dc1db45f564e17efa894ba915c31d Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Wed, 9 Jun 2021 15:58:08 +0200 Subject: [PATCH 2/3] [ADD] comments --- exercises/Jupyter notebook CVML.ipynb | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/exercises/Jupyter notebook CVML.ipynb b/exercises/Jupyter notebook CVML.ipynb index f2b45d5..e6022e5 100644 --- a/exercises/Jupyter notebook CVML.ipynb +++ b/exercises/Jupyter notebook CVML.ipynb @@ -2627,6 +2627,13 @@ "metadata": {}, "outputs": [], "source": [ + "\"\"\"\n", + "compile het model met de binary crossentropy loss function. Dit doen we omdat\n", + "we maar 2 verschillende klassen hebben.\n", + "We gebruiken rmsprop als optimizer omdat INVULLEN\n", + "We gebruiken de accuracy als metric omdat we daarop willen trainen.\n", + "\"\"\"\n", + "\n", "model.compile(loss='binary_crossentropy',\n", " optimizer='rmsprop',\n", " metrics=['accuracy'])" @@ -2792,6 +2799,9 @@ } ], "source": [ + "\n", + "#fit het model met de datasets. We gebruiken 70 epochs en 3 stappen per epoch.\n", + "\n", "model_ft = model.fit(train_dataset,\n", " steps_per_epoch=3,\n", " epochs=70,\n", @@ -3188,6 +3198,7 @@ } ], "source": [ + "# laat het netwerk een prediction doen op alle test fotos.\n", "dir_path = '../data/imgs/test/'\n", "\n", "for i in os.listdir(dir_path):\n", @@ -3210,12 +3221,13 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "530bae52", + "cell_type": "markdown", + "id": "069341a9", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "### Conclusie\n", + "We hebben het CNN getest en " + ] } ], "metadata": { From 11bf5ce5a6e2236365ef6f66b0947278b69be2ed Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Wed, 9 Jun 2021 16:03:14 +0200 Subject: [PATCH 3/3] comments --- exercises/Jupyter notebook CVML.ipynb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/exercises/Jupyter notebook CVML.ipynb b/exercises/Jupyter notebook CVML.ipynb index e6022e5..aef843c 100644 --- a/exercises/Jupyter notebook CVML.ipynb +++ b/exercises/Jupyter notebook CVML.ipynb @@ -2374,7 +2374,9 @@ "en de rmsprop als optimizer.\n", "We willen de accuracy vergelijken door deze als metric mee te geven.\n", "\n", - "TODO optimizer en loss uitleggen\n", + "we gebruiken de rmsprop optimizer omdat deze goed te gebruiken is voor kleine\n", + "batch sizes.\n", + "TODO loss uitleggen\n", "\"\"\"\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer='rmsprop',\n", @@ -2630,7 +2632,9 @@ "\"\"\"\n", "compile het model met de binary crossentropy loss function. Dit doen we omdat\n", "we maar 2 verschillende klassen hebben.\n", - "We gebruiken rmsprop als optimizer omdat INVULLEN\n", + "We gebruiken rmsprop als optimizer omdat we een kleine batch size hebben.\n", + "Deze optimizer balanceert de step size zodat deze niet te groot of te klein \n", + "worden.\n", "We gebruiken de accuracy als metric omdat we daarop willen trainen.\n", "\"\"\"\n", "\n",