{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":11848,"databundleVersionId":862157,"sourceType":"competition"},{"sourceId":8076789,"sourceType":"datasetVersion","datasetId":4766598},{"sourceId":8076651,"sourceType":"datasetVersion","datasetId":4766502},{"sourceId":171371181,"sourceType":"kernelVersion"}],"dockerImageVersionId":30684,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\ntrain_df = pd.read_csv('/kaggle/input/my-dataset/train_labels.csv')\nsample_submission = pd.read_csv('/kaggle/input/my-dataset/sample_submission.csv')\n\n\nimport os\nall_filenames = [os.path.join(dirname, filename) for dirname, _, filenames in os.walk('/kaggle/input') for filename in filenames]\nprint(f\"Total number of files: {len(all_filenames)}\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-04-10T20:44:10.048299Z","iopub.execute_input":"2024-04-10T20:44:10.049095Z","iopub.status.idle":"2024-04-10T20:52:21.100219Z","shell.execute_reply.started":"2024-04-10T20:44:10.049060Z","shell.execute_reply":"2024-04-10T20:52:21.098903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\n\ntrain_df = pd.read_csv('/kaggle/input/my-dataset/train_labels.csv')\nsample_submission = pd.read_csv('/kaggle/input/my-dataset/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-04-10T20:52:21.101967Z","iopub.execute_input":"2024-04-10T20:52:21.102285Z","iopub.status.idle":"2024-04-10T20:52:21.437727Z","shell.execute_reply.started":"2024-04-10T20:52:21.102254Z","shell.execute_reply":"2024-04-10T20:52:21.436460Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\ntrain_df = pd.read_csv('/kaggle/input/my-dataset/train_labels.csv')\n\nsns.countplot(x='label', data=train_df)\nplt.title('Distribution of Labels')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-10T20:52:21.439215Z","iopub.execute_input":"2024-04-10T20:52:21.439597Z","iopub.status.idle":"2024-04-10T20:52:23.473811Z","shell.execute_reply.started":"2024-04-10T20:52:21.439569Z","shell.execute_reply":"2024-04-10T20:52:23.472706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_counts = train_df['label'].value_counts()\n\nlabel_counts","metadata":{"execution":{"iopub.status.busy":"2024-04-10T20:52:23.475960Z","iopub.execute_input":"2024-04-10T20:52:23.476260Z","iopub.status.idle":"2024-04-10T20:52:23.489151Z","shell.execute_reply.started":"2024-04-10T20:52:23.476236Z","shell.execute_reply":"2024-04-10T20:52:23.488113Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# import numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Conv2D, Flatten, MaxPooling2D\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.preprocessing.image import img_to_array, load_img\nimport os\n\n# Set the path to the dataset and images\ndataset_path = '/kaggle/input/my-dataset/'\npictures_path = '/kaggle/input/pictures/train/'  # Update the path to the correct directory\n\n# Load and downsample the dataset\ntrain_df = pd.read_csv(dataset_path + 'train_labels.csv')\ndownsampled_df = train_df.sample(n=2500, random_state=42)\n\n# Preprocess images\nimage_list = []\nfor image_id in downsampled_df['id']:\n    img_path = os.path.join(pictures_path, f'{image_id}.tif')\n    if os.path.exists(img_path):\n        img = load_img(img_path, target_size=(96, 96))\n        img_array = img_to_array(img)\n        img_array /= 255.0\n        image_list.append(img_array)\n    else:\n        print(f\"Image not found: {img_path}\")\n\n# Prepare the dataset\nX = np.array(image_list)\ny = downsampled_df['label'].values\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Define the CNN model\ndef build_model(learning_rate=1e-3):\n    model = Sequential([\n        Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(96, 96, 3)),\n        MaxPooling2D(pool_size=(2, 2)),\n        Flatten(),\n        Dense(units=64, activation='relu'),\n        Dense(units=1, activation='sigmoid')\n    ])\n    model.compile(optimizer=Adam(learning_rate=learning_rate),\n                  loss='binary_crossentropy',\n                  metrics=['accuracy'])\n    return model\n\n# Define hyperparameters to tune\nbatch_sizes = [16, 32, 64]\nepochs_list = [10, 20, 30]\nlearning_rates = [1e-2, 1e-3, 1e-4]\n\n# Perform grid search\nbest_accuracy = 0\nbest_params = None\nfor batch_size in batch_sizes:\n    for epochs in epochs_list:\n        for learning_rate in learning_rates:\n            model = build_model(learning_rate)\n            model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=0)\n            _, accuracy = model.evaluate(X_val, y_val, verbose=0)\n            if accuracy > best_accuracy:\n                best_accuracy = accuracy\n                best_params = {'batch_size': batch_size, 'epochs': epochs, 'learning_rate': learning_rate}\n            print(f\"Accuracy: {accuracy:.4f} with params: {best_params}\")\n\n# Summarize results\nprint(f\"Best accuracy: {best_accuracy:.4f} using {best_params}\")","metadata":{"execution":{"iopub.status.busy":"2024-04-10T20:52:23.491121Z","iopub.execute_input":"2024-04-10T20:52:23.492090Z"}}}]}