{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":3649,"databundleVersionId":46718,"sourceType":"competition"}],"dockerImageVersionId":30919,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.models import Model, load_model\nfrom tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout\nfrom tensorflow.keras.applications import MobileNetV2\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import Adam\nimport os\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Load CIFAR-10 dataset\n(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()\ny_train, y_test = tf.keras.utils.to_categorical(y_train, 10), tf.keras.utils.to_categorical(y_test, 10)\n\n# Normalize images\nx_train, x_test = x_train / 255.0, x_test / 255.0\n\n# Load pre-trained MobileNetV2\nbase_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(32, 32, 3))\nbase_model.trainable = False  # Freeze base model\n\n# Modify the model\nx = base_model.output\nx = GlobalAveragePooling2D()(x)\nx = Dense(128, activation='relu')(x)\nx = Dropout(0.5)(x)\noutputs = Dense(10, activation='softmax')(x)\nmodel = Model(inputs=base_model.input, outputs=outputs)\n\n# Compile model\nmodel.compile(optimizer=Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=['accuracy'])\n\n# Data augmentation\ndatagen = ImageDataGenerator(\n    width_shift_range=0.1,\n    height_shift_range=0.1,\n    horizontal_flip=True)\ndatagen.fit(x_train)\n\n# Train model\nhistory = model.fit(datagen.flow(x_train, y_train, batch_size=64),\n                    validation_data=(x_test, y_test),\n                    epochs=10)\n\n# Fine-tune: Unfreeze some layers\nfor layer in base_model.layers[-50:]:\n    layer.trainable = True\n\nmodel.compile(optimizer=Adam(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])\n\n# Train again with fine-tuning\nhistory_fine = model.fit(datagen.flow(x_train, y_train, batch_size=64),\n                         validation_data=(x_test, y_test),\n                         epochs=10)\n\n# Save model\nmodel.save(\"fine_tuned_cnn.h5\")\n\n# Load and test the model\nfrom tensorflow.keras.models import load_model\nmodel = load_model(\"fine_tuned_cnn.h5\")\nloss, accuracy = model.evaluate(x_test, y_test)\nprint(f\"Test Accuracy: {accuracy * 100:.2f}%\")\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-02-22T22:09:26.811865Z","iopub.execute_input":"2025-02-22T22:09:26.812234Z","iopub.status.idle":"2025-02-22T22:19:34.995260Z","shell.execute_reply.started":"2025-02-22T22:09:26.812206Z","shell.execute_reply":"2025-02-22T22:19:34.994596Z"}},"outputs":[],"execution_count":null}]}