[merge with main]
This commit is contained in:
@@ -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",
|
||||
@@ -2457,6 +2459,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 +2473,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# maak image data generator objecten\n",
|
||||
"train = ImageDataGenerator()\n",
|
||||
"validation = ImageDataGenerator()"
|
||||
]
|
||||
@@ -2490,6 +2494,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 +2531,7 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# laat de indices van de classes zien\n",
|
||||
"train_dataset.class_indices"
|
||||
]
|
||||
},
|
||||
@@ -2541,6 +2554,7 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# hier kunnen we zien hoeveel 'lars' classes zijn en hoeveel 'sem'\n",
|
||||
"train_dataset.classes"
|
||||
]
|
||||
},
|
||||
@@ -2551,23 +2565,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'))"
|
||||
]
|
||||
},
|
||||
@@ -2578,6 +2629,15 @@
|
||||
"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 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",
|
||||
"model.compile(loss='binary_crossentropy',\n",
|
||||
" optimizer='rmsprop',\n",
|
||||
" metrics=['accuracy'])"
|
||||
@@ -2803,6 +2863,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=100,\n",
|
||||
@@ -3199,6 +3262,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",
|
||||
@@ -3221,28 +3285,13 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "530bae52",
|
||||
"cell_type": "markdown",
|
||||
"id": "069341a9",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "c820052b",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "3a314192",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
"source": [
|
||||
"### Conclusie\n",
|
||||
"We hebben het CNN getest en "
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
||||
Reference in New Issue
Block a user