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'))" ] },