maykulo commited on
Commit
399457b
Β·
verified Β·
1 Parent(s): b11d193

Upload main.ipynb

Browse files
Files changed (1) hide show
  1. main.ipynb +168 -43
main.ipynb CHANGED
@@ -18,10 +18,10 @@
18
  "name": "stderr",
19
  "output_type": "stream",
20
  "text": [
21
- "2025-01-19 18:16:00.702584: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n",
22
- "2025-01-19 18:16:00.727147: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n",
23
- "2025-01-19 18:16:00.732988: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n",
24
- "2025-01-19 18:16:00.750369: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
25
  "To enable the following instructions: SSE4.1 SSE4.2 AVX AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
26
  ]
27
  }
@@ -269,7 +269,7 @@
269
  },
270
  {
271
  "cell_type": "code",
272
- "execution_count": null,
273
  "id": "c5c5e756-0735-4e6d-86a5-33009a44e199",
274
  "metadata": {},
275
  "outputs": [
@@ -278,26 +278,36 @@
278
  "output_type": "stream",
279
  "text": [
280
  "Epoch 1/10\n",
281
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m17s\u001b[0m 9ms/step - accuracy: 0.8810 - loss: 0.4232\n",
282
  "Epoch 2/10\n",
283
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 9ms/step - accuracy: 0.9648 - loss: 0.1207\n",
284
  "Epoch 3/10\n",
285
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 9ms/step - accuracy: 0.9772 - loss: 0.0790\n",
286
  "Epoch 4/10\n",
287
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 8ms/step - accuracy: 0.9829 - loss: 0.0581\n",
288
  "Epoch 5/10\n",
289
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 8ms/step - accuracy: 0.9875 - loss: 0.0430\n",
290
  "Epoch 6/10\n",
291
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 8ms/step - accuracy: 0.9890 - loss: 0.0365\n",
292
  "Epoch 7/10\n",
293
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 9ms/step - accuracy: 0.9920 - loss: 0.0265\n",
294
  "Epoch 8/10\n",
295
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 8ms/step - accuracy: 0.9930 - loss: 0.0232\n",
296
  "Epoch 9/10\n",
297
- "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 8ms/step - accuracy: 0.9943 - loss: 0.0182\n",
298
  "Epoch 10/10\n",
299
- "\u001b[1m 420/1875\u001b[0m \u001b[32m━━━━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m11s\u001b[0m 8ms/step - accuracy: 0.9973 - loss: 0.0119"
300
  ]
 
 
 
 
 
 
 
 
 
 
301
  }
302
  ],
303
  "source": [
@@ -306,10 +316,19 @@
306
  },
307
  {
308
  "cell_type": "code",
309
- "execution_count": null,
310
  "id": "3d879a06-4779-450b-a730-2fd403409392",
311
  "metadata": {},
312
- "outputs": [],
 
 
 
 
 
 
 
 
 
313
  "source": [
314
  "test_loss, test_acc = model.evaluate(test_images, test_labels)\n",
315
  "print('Test accuracy:', test_acc)"
@@ -325,7 +344,7 @@
325
  },
326
  {
327
  "cell_type": "code",
328
- "execution_count": null,
329
  "id": "5cc13e61-aebf-46e1-94b1-a20d369e0f7d",
330
  "metadata": {},
331
  "outputs": [],
@@ -355,12 +374,23 @@
355
  },
356
  {
357
  "cell_type": "code",
358
- "execution_count": null,
359
  "id": "51fdf7c3-0016-4bd6-a99f-9ffebfffd6cf",
360
  "metadata": {
361
  "scrolled": true
362
  },
363
- "outputs": [],
 
 
 
 
 
 
 
 
 
 
 
364
  "source": [
365
  "# Filter the images to get only those with label '2' for better understanding and comparison\n",
366
  "label_of_interest = 2\n",
@@ -393,7 +423,7 @@
393
  },
394
  {
395
  "cell_type": "code",
396
- "execution_count": null,
397
  "id": "0e468ad2-5c10-461d-b39f-38ef3a56b826",
398
  "metadata": {},
399
  "outputs": [],
@@ -405,10 +435,47 @@
405
  },
406
  {
407
  "cell_type": "code",
408
- "execution_count": null,
409
  "id": "bb11d7d9-d7a9-495d-ae64-f4609fdbdfbd",
410
  "metadata": {},
411
- "outputs": [],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
412
  "source": [
413
  "# Train the model using the augmented data generator\n",
414
  "model.fit(datagen.flow(train_images, train_labels, batch_size=32), epochs=10)"
@@ -416,10 +483,19 @@
416
  },
417
  {
418
  "cell_type": "code",
419
- "execution_count": null,
420
  "id": "5d4bbd2a-9e18-49dd-a555-d1841d5d68f2",
421
  "metadata": {},
422
- "outputs": [],
 
 
 
 
 
 
 
 
 
423
  "source": [
424
  "# Evaluate the model on the test set\n",
425
  "augmented_test_loss, augmented_test_acc = model.evaluate(test_images, test_labels)\n",
@@ -428,10 +504,19 @@
428
  },
429
  {
430
  "cell_type": "code",
431
- "execution_count": null,
432
  "id": "9a788df7-c878-49f6-86b5-e385be7bf842",
433
  "metadata": {},
434
- "outputs": [],
 
 
 
 
 
 
 
 
 
435
  "source": [
436
  "# Compare the model accuracy on the original set vs the augmented set\n",
437
  "print('Simple test accuracy:', test_acc)\n",
@@ -448,7 +533,7 @@
448
  },
449
  {
450
  "cell_type": "code",
451
- "execution_count": null,
452
  "id": "89cca745-bda4-4a8a-92f0-8d31d508cc8e",
453
  "metadata": {},
454
  "outputs": [],
@@ -474,7 +559,7 @@
474
  },
475
  {
476
  "cell_type": "code",
477
- "execution_count": null,
478
  "id": "c1dfe2cf-86f9-4f36-8184-1dd566ece339",
479
  "metadata": {},
480
  "outputs": [],
@@ -484,22 +569,70 @@
484
  },
485
  {
486
  "cell_type": "code",
487
- "execution_count": null,
488
  "id": "93ba283c-6a0f-49c8-adf6-505ac51cbece",
489
  "metadata": {},
490
- "outputs": [],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
491
  "source": [
492
- "advanced_model.fit(datagen.flow(train_images, train_labels, batch_size=128),\n",
493
  " validation_data=(test_images, test_labels),\n",
494
  " epochs=10)"
495
  ]
496
  },
497
  {
498
  "cell_type": "code",
499
- "execution_count": null,
500
  "id": "ba5a04bc-f912-45ee-8c38-f860ae59687a",
501
  "metadata": {},
502
- "outputs": [],
 
 
 
 
 
 
 
 
 
 
 
503
  "source": [
504
  "advanced_test_loss, advanced_test_acc = advanced_model.evaluate(test_images, test_labels)\n",
505
  "print('Simple test accuracy:', test_acc)\n",
@@ -509,7 +642,7 @@
509
  },
510
  {
511
  "cell_type": "code",
512
- "execution_count": null,
513
  "id": "2178138b-5388-45a0-9e01-5cbae10e5bb9",
514
  "metadata": {},
515
  "outputs": [],
@@ -518,14 +651,6 @@
518
  "if __name__ == \"__main__\":\n",
519
  " pass # Prevent unintended execution during import"
520
  ]
521
- },
522
- {
523
- "cell_type": "code",
524
- "execution_count": null,
525
- "id": "9b99f734-21dd-4621-b62f-8f2a88783f0b",
526
- "metadata": {},
527
- "outputs": [],
528
- "source": []
529
  }
530
  ],
531
  "metadata": {
 
18
  "name": "stderr",
19
  "output_type": "stream",
20
  "text": [
21
+ "2025-01-19 20:47:16.372082: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n",
22
+ "2025-01-19 20:47:16.396318: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n",
23
+ "2025-01-19 20:47:16.402421: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n",
24
+ "2025-01-19 20:47:16.420317: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
25
  "To enable the following instructions: SSE4.1 SSE4.2 AVX AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n"
26
  ]
27
  }
 
269
  },
270
  {
271
  "cell_type": "code",
272
+ "execution_count": 13,
273
  "id": "c5c5e756-0735-4e6d-86a5-33009a44e199",
274
  "metadata": {},
275
  "outputs": [
 
278
  "output_type": "stream",
279
  "text": [
280
  "Epoch 1/10\n",
281
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 8ms/step - accuracy: 0.8804 - loss: 0.4226\n",
282
  "Epoch 2/10\n",
283
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 9ms/step - accuracy: 0.9634 - loss: 0.1228\n",
284
  "Epoch 3/10\n",
285
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 9ms/step - accuracy: 0.9766 - loss: 0.0772\n",
286
  "Epoch 4/10\n",
287
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 8ms/step - accuracy: 0.9813 - loss: 0.0627\n",
288
  "Epoch 5/10\n",
289
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 9ms/step - accuracy: 0.9869 - loss: 0.0447\n",
290
  "Epoch 6/10\n",
291
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 8ms/step - accuracy: 0.9893 - loss: 0.0332\n",
292
  "Epoch 7/10\n",
293
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 9ms/step - accuracy: 0.9926 - loss: 0.0250\n",
294
  "Epoch 8/10\n",
295
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 8ms/step - accuracy: 0.9936 - loss: 0.0224\n",
296
  "Epoch 9/10\n",
297
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 8ms/step - accuracy: 0.9942 - loss: 0.0187\n",
298
  "Epoch 10/10\n",
299
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 8ms/step - accuracy: 0.9962 - loss: 0.0132\n"
300
  ]
301
+ },
302
+ {
303
+ "data": {
304
+ "text/plain": [
305
+ "<keras.src.callbacks.history.History at 0x781c2256aa10>"
306
+ ]
307
+ },
308
+ "execution_count": 13,
309
+ "metadata": {},
310
+ "output_type": "execute_result"
311
  }
312
  ],
313
  "source": [
 
316
  },
317
  {
318
  "cell_type": "code",
319
+ "execution_count": 14,
320
  "id": "3d879a06-4779-450b-a730-2fd403409392",
321
  "metadata": {},
322
+ "outputs": [
323
+ {
324
+ "name": "stdout",
325
+ "output_type": "stream",
326
+ "text": [
327
+ "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9739 - loss: 0.0968\n",
328
+ "Test accuracy: 0.9768999814987183\n"
329
+ ]
330
+ }
331
+ ],
332
  "source": [
333
  "test_loss, test_acc = model.evaluate(test_images, test_labels)\n",
334
  "print('Test accuracy:', test_acc)"
 
344
  },
345
  {
346
  "cell_type": "code",
347
+ "execution_count": 15,
348
  "id": "5cc13e61-aebf-46e1-94b1-a20d369e0f7d",
349
  "metadata": {},
350
  "outputs": [],
 
374
  },
375
  {
376
  "cell_type": "code",
377
+ "execution_count": 16,
378
  "id": "51fdf7c3-0016-4bd6-a99f-9ffebfffd6cf",
379
  "metadata": {
380
  "scrolled": true
381
  },
382
+ "outputs": [
383
+ {
384
+ "data": {
385
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAABcAAAAExCAYAAABbMgFNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAp70lEQVR4nO3da7CV5X03/muzT5zPiJzBjSAKCqIRFBMFDyN14okGbdPEUzVjGnsw6ZhJmrQeMknrNJN2mmo1g0NjEocEwRjiAUlIoyJqAwaNCggKAhsRRGAf2If1f/H8H/rYxFw/w4a9uPl8Znghfvf3uvbaa13rXj9upaJUKpUSAAAAAAAUTJfO3gAAAAAAABwKBuAAAAAAABSSATgAAAAAAIVkAA4AAAAAQCEZgAMAAAAAUEgG4AAAAAAAFJIBOAAAAAAAhWQADgAAAABAIRmAAwAAAABQSAbgR6j7778/VVRUpOeff75D+ioqKtJf/MVfdEjX/9v593//93/Q177wwgvps5/9bJo0aVLq1atXGjx4cDrvvPPSsmXLOnSPwKHhjALKmTMKKGfOKKCcOaM4EhmAU5a+//3vp5UrV6Zrr702LV68ON13332ptrY2zZo1K82fP7+ztwcc5ZxRQDlzRgHlzBkFlDNnVDFVdfYG4Hf527/923TXXXe97/dmz56dTj311HTbbbelT33qU520MwBnFFDenFFAOXNGAeXMGVVM7gAvsKampnTLLbekyZMnpz59+qT+/fun6dOnp8WLF3/g19xzzz1p3Lhxqba2Np144onpBz/4wW9ltm3blm688cY0fPjwVFNTk8aMGZP+4R/+IbW2tnbY3o855pjf+r3Kyso0derUtGnTpg5bB+g8ziignDmjgHLmjALKmTOKcuMO8AJrbm5OO3fuTJ///OfTsGHD0v79+9PSpUvT5ZdfnubNm/dbf2r18MMPp5/97GfptttuSz169Ejf/va301VXXZWqqqrSnDlzUkr/57D5yEc+krp06ZK+8pWvpLq6uvTMM8+kO+64I23cuDHNmzfv9+5p9OjRKaWUNm7c+KG/n9bW1vRf//Vf6aSTTvrQXwuUH2cUUM6cUUA5c0YB5cwZRdkpcUSaN29eKaVUeu6558Jf09raWmppaSldd911pSlTprzv36WUSt26dStt27btffkTTjihNHbs2AO/d+ONN5Z69uxZeuONN9739XfddVcppVR66aWX3tf51a9+9X25urq6Ul1dXXjP/68vfelLpZRSadGiRX/Q1wOHjzMKKGfOKKCcOaOAcuaM4kjkf4FScAsWLEhnnXVW6tmzZ6qqqkrV1dXpO9/5TvrNb37zW9lZs2alwYMHH/jnysrKNHfu3LRu3bq0efPmlFJKjzzySDr33HPT0KFDU2tr64FfF110UUoppeXLl//e/axbty6tW7fuQ38f9913X7rzzjvTLbfcki655JIP/fVAeXJGAeXMGQWUM2cUUM6cUZQTA/ACW7hwYfrEJz6Rhg0blr773e+mZ555Jj333HPp2muvTU1NTb+VP/bYYz/w9955552UUkr19fXpxz/+caqurn7fr//7n4Hs2LGjw7+PefPmpRtvvDHdcMMN6Z/+6Z86vB/oHM4ooJw5o4By5owCypkzinLj/wFeYN/97nfTmDFj0oMPPpgqKioO/H5zc/PvzG/btu0Df2/AgAEppZQGDhyYTj755HTnnXf+zo6hQ4ce7LbfZ968een6669Pn/70p9Pdd9/9vu8DOLI5o4By5owCypkzCihnzijKjQF4gVVUVKSampr3vUi3bdv2gX/r7pNPPpnq6+sP/GcnbW1t6cEHH0x1dXVp+PDhKaWULr744rRkyZJUV1eX+vXrd0j3f//996frr78+ffKTn0z33XefwwYKxhkFlDNnFFDOnFFAOXNGUW4MwI9wy5Yt+51/g+3s2bPTxRdfnBYuXJhuuummNGfOnLRp06Z0++23pyFDhqS1a9f+1tcMHDgwzZw5M/3d3/3dgb9195VXXkk/+MEPDmRuu+229MQTT6Qzzzwz3XzzzWn8+PGpqakpbdy4MS1ZsiTdfffdBw6n32Xs2LEppZT9/y4tWLAgXXfddWny5MnpxhtvTCtXrnzfv58yZUqqra39vR1A53NGAeXMGQWUM2cUUM6cURxROvtv4eQP83//1t0P+rVhw4ZSqVQqff3rXy+NHj26VFtbW5owYULp3nvvLX31q18t/e8ffUqp9NnPfrb07W9/u1RXV1eqrq4unXDCCaUHHnjgt9Z+++23SzfffHNpzJgxperq6lL//v1LU6dOLX3pS18q7d27932d//tv3R01alRp1KhR2e/v05/+dOj7A8qTM2rDh33IgMPIGbXhwz5kwGHkjNrwYR8y4DByRm34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176WzVx77bWhriuvvDKbGTp0aKhr48aN2Uzk89L3vve90HqvvvpqNhN9TFevXp3NvPvuu6GuNWvWZDN79uwJdb333nvZzI4dO0JdRecOcAAAAAAACskAHAAAAACAQjIABwAAAACgkAzAAQAAAAAoJANwAAAAAAAKyQAcAAAAAIBCMgAHAAAAAKCQDMABAAAAACikqo4sa2xsDOVmzpyZzZx44omhrsrKylDuSFYqlbKZ3bt3h7qeffbZbObuu+/OZl5//fXQelu2bMlmrr/++lBX3759Q7mIyPOma9euoa5Zs2ZlMy+88EKoiyNH9OwZP358NvOpT30q1HXhhRdmMz169Ah1HW7Nzc2h3MqVK7OZf//3f89mdu3aFVpv9erV2Ux9fX2oCzhydevWLZTbtGlTNrNnz55sJnomLl26NJv55S9/Gerav39/NhO55kwppSFDhmQz0bMz8j45evToUFefPn1COaBjRM67p59+OtT1sY99LJsZMGBAqCtyPVxVFRuFtLS0hHJwOETnCnfeeWc2c8YZZ4S6pk2bls3U1NSEuh577LFsZvHixdnM5s2bQ+tF7Ny5M5SLzMkqKipCXdHZKR3LHeAAAAAAABSSATgAAAAAAIVkAA4AAAAAQCEZgAMAAAAAUEgG4AAAAAAAFJIBOAAAAAAAhWQADgAAAABAIRmAAwAAAABQSAbgAAAAAAAUUlVHlr355puh3D333JPNzJkzJ9Q1bdq0bGbEiBGhrnK1cePGbObJJ58MdX3rW9/KZtasWRPqiujTp082c9FFF4W6jjnmmGymd+/eoa6ampps5sUXXwx1bdq0KZSjWAYNGhTKzZ07N5u54oorQl19+/YN5Q63V199NZu59957Q10PPPBANrN9+/ZQF0BUY2NjKLdhw4Zs5p//+Z+zmSlTpoTWW7hwYTbz85//PNTVkVavXp3NNDU1hbqam5uzmV27doW69u/fn81069atw7qi2traOqwLyknkdf7ss8+GuiKv84EDB4a6Lr300mwmekYtWLAgm+nZs2eoa9u2baEcfJDo+8nPfvazbCb62vyP//iPbGbnzp2hriNZ9MygfLkDHAAAAACAQjIABwAAAACgkAzAAQAAAAAoJANwAAAAAAAKyQAcAAAAAIBCMgAHAAAAAKCQDMABAAAAACgkA3AAAAAAAAqpolQqlULBiooOW7RP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",
386
+ "text/plain": [
387
+ "<Figure size 1500x300 with 5 Axes>"
388
+ ]
389
+ },
390
+ "metadata": {},
391
+ "output_type": "display_data"
392
+ }
393
+ ],
394
  "source": [
395
  "# Filter the images to get only those with label '2' for better understanding and comparison\n",
396
  "label_of_interest = 2\n",
 
423
  },
424
  {
425
  "cell_type": "code",
426
+ "execution_count": 17,
427
  "id": "0e468ad2-5c10-461d-b39f-38ef3a56b826",
428
  "metadata": {},
429
  "outputs": [],
 
435
  },
436
  {
437
  "cell_type": "code",
438
+ "execution_count": 19,
439
  "id": "bb11d7d9-d7a9-495d-ae64-f4609fdbdfbd",
440
  "metadata": {},
441
+ "outputs": [
442
+ {
443
+ "name": "stdout",
444
+ "output_type": "stream",
445
+ "text": [
446
+ "Epoch 1/10\n",
447
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m58s\u001b[0m 31ms/step - accuracy: 0.6399 - loss: 1.1305\n",
448
+ "Epoch 2/10\n",
449
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m57s\u001b[0m 30ms/step - accuracy: 0.7456 - loss: 0.8298\n",
450
+ "Epoch 3/10\n",
451
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m59s\u001b[0m 31ms/step - accuracy: 0.7830 - loss: 0.6953\n",
452
+ "Epoch 4/10\n",
453
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m58s\u001b[0m 31ms/step - accuracy: 0.8088 - loss: 0.6210\n",
454
+ "Epoch 5/10\n",
455
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m57s\u001b[0m 30ms/step - accuracy: 0.8225 - loss: 0.5732\n",
456
+ "Epoch 6/10\n",
457
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m56s\u001b[0m 30ms/step - accuracy: 0.8357 - loss: 0.5396\n",
458
+ "Epoch 7/10\n",
459
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m59s\u001b[0m 31ms/step - accuracy: 0.8414 - loss: 0.5202\n",
460
+ "Epoch 8/10\n",
461
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m53s\u001b[0m 28ms/step - accuracy: 0.8482 - loss: 0.5012\n",
462
+ "Epoch 9/10\n",
463
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m54s\u001b[0m 29ms/step - accuracy: 0.8566 - loss: 0.4772\n",
464
+ "Epoch 10/10\n",
465
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m57s\u001b[0m 30ms/step - accuracy: 0.8574 - loss: 0.4629\n"
466
+ ]
467
+ },
468
+ {
469
+ "data": {
470
+ "text/plain": [
471
+ "<keras.src.callbacks.history.History at 0x781c1ecec190>"
472
+ ]
473
+ },
474
+ "execution_count": 19,
475
+ "metadata": {},
476
+ "output_type": "execute_result"
477
+ }
478
+ ],
479
  "source": [
480
  "# Train the model using the augmented data generator\n",
481
  "model.fit(datagen.flow(train_images, train_labels, batch_size=32), epochs=10)"
 
483
  },
484
  {
485
  "cell_type": "code",
486
+ "execution_count": 20,
487
  "id": "5d4bbd2a-9e18-49dd-a555-d1841d5d68f2",
488
  "metadata": {},
489
+ "outputs": [
490
+ {
491
+ "name": "stdout",
492
+ "output_type": "stream",
493
+ "text": [
494
+ "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.9229 - loss: 0.2424\n",
495
+ "Augmented test accuracy: 0.932200014591217\n"
496
+ ]
497
+ }
498
+ ],
499
  "source": [
500
  "# Evaluate the model on the test set\n",
501
  "augmented_test_loss, augmented_test_acc = model.evaluate(test_images, test_labels)\n",
 
504
  },
505
  {
506
  "cell_type": "code",
507
+ "execution_count": 21,
508
  "id": "9a788df7-c878-49f6-86b5-e385be7bf842",
509
  "metadata": {},
510
+ "outputs": [
511
+ {
512
+ "name": "stdout",
513
+ "output_type": "stream",
514
+ "text": [
515
+ "Simple test accuracy: 0.9768999814987183\n",
516
+ "Simple augmented test accuracy: 0.932200014591217\n"
517
+ ]
518
+ }
519
+ ],
520
  "source": [
521
  "# Compare the model accuracy on the original set vs the augmented set\n",
522
  "print('Simple test accuracy:', test_acc)\n",
 
533
  },
534
  {
535
  "cell_type": "code",
536
+ "execution_count": 22,
537
  "id": "89cca745-bda4-4a8a-92f0-8d31d508cc8e",
538
  "metadata": {},
539
  "outputs": [],
 
559
  },
560
  {
561
  "cell_type": "code",
562
+ "execution_count": 23,
563
  "id": "c1dfe2cf-86f9-4f36-8184-1dd566ece339",
564
  "metadata": {},
565
  "outputs": [],
 
569
  },
570
  {
571
  "cell_type": "code",
572
+ "execution_count": 24,
573
  "id": "93ba283c-6a0f-49c8-adf6-505ac51cbece",
574
  "metadata": {},
575
+ "outputs": [
576
+ {
577
+ "name": "stdout",
578
+ "output_type": "stream",
579
+ "text": [
580
+ "Epoch 1/10\n",
581
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m251s\u001b[0m 133ms/step - accuracy: 0.5385 - loss: 1.3305 - val_accuracy: 0.9559 - val_loss: 0.1485\n",
582
+ "Epoch 2/10\n",
583
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m246s\u001b[0m 131ms/step - accuracy: 0.8474 - loss: 0.4887 - val_accuracy: 0.9647 - val_loss: 0.1102\n",
584
+ "Epoch 3/10\n",
585
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m241s\u001b[0m 129ms/step - accuracy: 0.8866 - loss: 0.3713 - val_accuracy: 0.9685 - val_loss: 0.0905\n",
586
+ "Epoch 4/10\n",
587
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m241s\u001b[0m 128ms/step - accuracy: 0.9064 - loss: 0.3077 - val_accuracy: 0.9735 - val_loss: 0.0727\n",
588
+ "Epoch 5/10\n",
589
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m245s\u001b[0m 130ms/step - accuracy: 0.9166 - loss: 0.2790 - val_accuracy: 0.9762 - val_loss: 0.0756\n",
590
+ "Epoch 6/10\n",
591
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m243s\u001b[0m 129ms/step - accuracy: 0.9195 - loss: 0.2690 - val_accuracy: 0.9792 - val_loss: 0.0639\n",
592
+ "Epoch 7/10\n",
593
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m245s\u001b[0m 130ms/step - accuracy: 0.9270 - loss: 0.2395 - val_accuracy: 0.9804 - val_loss: 0.0569\n",
594
+ "Epoch 8/10\n",
595
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m240s\u001b[0m 128ms/step - accuracy: 0.9340 - loss: 0.2231 - val_accuracy: 0.9774 - val_loss: 0.0704\n",
596
+ "Epoch 9/10\n",
597
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m243s\u001b[0m 130ms/step - accuracy: 0.9356 - loss: 0.2144 - val_accuracy: 0.9844 - val_loss: 0.0496\n",
598
+ "Epoch 10/10\n",
599
+ "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m240s\u001b[0m 128ms/step - accuracy: 0.9395 - loss: 0.2053 - val_accuracy: 0.9827 - val_loss: 0.0538\n"
600
+ ]
601
+ },
602
+ {
603
+ "data": {
604
+ "text/plain": [
605
+ "<keras.src.callbacks.history.History at 0x781c1ebabb10>"
606
+ ]
607
+ },
608
+ "execution_count": 24,
609
+ "metadata": {},
610
+ "output_type": "execute_result"
611
+ }
612
+ ],
613
  "source": [
614
+ "advanced_model.fit(datagen.flow(train_images, train_labels, batch_size=32),\n",
615
  " validation_data=(test_images, test_labels),\n",
616
  " epochs=10)"
617
  ]
618
  },
619
  {
620
  "cell_type": "code",
621
+ "execution_count": 25,
622
  "id": "ba5a04bc-f912-45ee-8c38-f860ae59687a",
623
  "metadata": {},
624
+ "outputs": [
625
+ {
626
+ "name": "stdout",
627
+ "output_type": "stream",
628
+ "text": [
629
+ "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 28ms/step - accuracy: 0.9814 - loss: 0.0564\n",
630
+ "Simple test accuracy: 0.9768999814987183\n",
631
+ "Simple augmented test accuracy: 0.932200014591217\n",
632
+ "Advanced test accuracy: 0.982699990272522\n"
633
+ ]
634
+ }
635
+ ],
636
  "source": [
637
  "advanced_test_loss, advanced_test_acc = advanced_model.evaluate(test_images, test_labels)\n",
638
  "print('Simple test accuracy:', test_acc)\n",
 
642
  },
643
  {
644
  "cell_type": "code",
645
+ "execution_count": 26,
646
  "id": "2178138b-5388-45a0-9e01-5cbae10e5bb9",
647
  "metadata": {},
648
  "outputs": [],
 
651
  "if __name__ == \"__main__\":\n",
652
  " pass # Prevent unintended execution during import"
653
  ]
 
 
 
 
 
 
 
 
654
  }
655
  ],
656
  "metadata": {