{"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":22962,"databundleVersionId":3171193,"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\n\ngpus = tf.config.list_physical_devices('GPU')\nif gpus:\n    try:\n        tf.config.experimental.set_memory_growth(gpus[0], True)\n        tf.config.set_visible_devices(gpus[0], 'GPU')\n        print(\"✅ GPU is enabled!\")\n    except RuntimeError as e:\n        print(\"❌ GPU error:\", e)\n\nfrom tensorflow.keras import mixed_precision\nmixed_precision.set_global_policy('mixed_float16')\nprint(\"✅ Mixed Precision Enabled!\")\n\nimport numpy as np\nimport pandas as pd\nimport torch\nimport torchvision.transforms as transforms\nfrom sklearn.model_selection import StratifiedKFold\nfrom torch.utils.data import DataLoader, Dataset\nimport tensorflow as tf\nfrom tensorflow.keras.applications import EfficientNetB0\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Dropout, GlobalAveragePooling2D\nimport matplotlib.pyplot as plt\n\ndef seed_everything(seed=42):\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n    tf.random.set_seed(seed)\n\nseed_everything()\n\ndf = pd.read_csv('../input/happy-whale-and-dolphin/train.csv')\n\n\ntrain_datagen = tf.keras.preprocessing.image.ImageDataGenerator(\n    rescale=1./255, validation_split=0.2, horizontal_flip=True, zoom_range=0.2)\n\ntrain_generator = train_datagen.flow_from_dataframe(\n    df, '../input/happy-whale-and-dolphin/train_images/', x_col='image',\n    y_col='individual_id', target_size=(224, 224), batch_size=32, class_mode='categorical', subset='training')\n\nval_generator = train_datagen.flow_from_dataframe(\n    df, '../input/happy-whale-and-dolphin/train_images/', x_col='image',\n    y_col='individual_id', target_size=(224, 224), batch_size=32, class_mode='categorical', subset='validation')\n\n\nbase_model = EfficientNetB0(weights='imagenet', include_top=False, input_shape=(224, 224, 3))\nbase_model.trainable = False\n\nmodel = Sequential([\n    base_model,\n    GlobalAveragePooling2D(),\n    Dense(512, activation='relu'),\n    Dropout(0.3),\n    Dense(len(train_generator.class_indices), activation='softmax')\n])\n\n\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n\nhistory = model.fit(train_generator, validation_data=val_generator, epochs=4)\n\nplt.plot(history.history['accuracy'], label='train_accuracy')\nplt.plot(history.history['val_accuracy'], label='val_accuracy')\nplt.xlabel('Epoch')\nplt.ylabel('Accuracy')\nplt.legend()\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-27T09:39:12.718832Z","iopub.execute_input":"2025-03-27T09:39:12.719193Z","iopub.status.idle":"2025-03-27T12:23:55.437821Z","shell.execute_reply.started":"2025-03-27T09:39:12.719157Z","shell.execute_reply":"2025-03-27T12:23:55.436580Z"}},"outputs":[],"execution_count":null}]}