{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[],"dockerImageVersionId":30776,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Using TensorFlow as an example\nimport tensorflow as tf\nfrom tensorflow.keras.datasets import cifar10\n\n(x_train, y_train), (x_test, y_test) = cifar10.load_data()\n\n# Normalize pixel values\nx_train, x_test = x_train / 255.0, x_test / 255.0\n\n# Convert labels to one-hot encoding\ny_train = tf.keras.utils.to_categorical(y_train, 10)\ny_test = tf.keras.utils.to_categorical(y_test, 10)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-09-25T14:11:05.988966Z","iopub.execute_input":"2024-09-25T14:11:05.989725Z","iopub.status.idle":"2024-09-25T14:11:38.298372Z","shell.execute_reply.started":"2024-09-25T14:11:05.989656Z","shell.execute_reply":"2024-09-25T14:11:38.297315Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.layers import Input, Conv2D, BatchNormalization, ReLU, Add, GlobalAveragePooling2D, Dense, Dropout\nfrom tensorflow.keras.models import Model\n\ndef residual_block(x, filters, kernel_size=3, downsample=False):\n    stride = 2 if downsample else 1\n    y = Conv2D(filters, kernel_size, strides=stride, padding='same', kernel_initializer='he_normal')(x)\n    y = BatchNormalization()(y)\n    y = ReLU()(y)\n\n    y = Conv2D(filters, kernel_size, strides=1, padding='same', kernel_initializer='he_normal')(y)\n    y = BatchNormalization()(y)\n\n    if downsample:\n        x = Conv2D(filters, 1, strides=2, padding='same', kernel_initializer='he_normal')(x)\n\n    out = Add()([x, y])\n    out = ReLU()(out)\n    return out\n\ndef build_resnet(input_shape, num_classes, num_blocks_list):\n    inputs = Input(shape=input_shape)\n    x = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal')(inputs)\n    x = BatchNormalization()(x)\n    x = ReLU()(x)\n\n    # Adding multiple sets of Residual Blocks with increasing filters\n    num_filters = 64\n    for i, num_blocks in enumerate(num_blocks_list):\n        for j in range(num_blocks):\n            x = residual_block(x, num_filters, downsample=(j==0 and i!=0))\n        num_filters *= 2\n\n    x = GlobalAveragePooling2D()(x)\n    x = Dense(256, activation='relu')(x)\n    x = Dropout(0.5)(x)  # Adding dropout for regularization\n    outputs = Dense(num_classes, activation='softmax')(x)\n\n    model = Model(inputs=inputs, outputs=outputs)\n    return model\n\n# Model configuration\ninput_shape = (32, 32, 3)\nnum_classes = 10\nnum_blocks_list = [2, 2, 2, 2]  # Example configuration with 4 sets of 2 blocks\n\n# Build and compile the model\nmodel = build_resnet(input_shape, num_classes, num_blocks_list)\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\nmodel.summary()\n","metadata":{"execution":{"iopub.status.busy":"2024-09-25T15:06:28.737344Z","iopub.execute_input":"2024-09-25T15:06:28.738264Z","iopub.status.idle":"2024-09-25T15:06:29.188714Z","shell.execute_reply.started":"2024-09-25T15:06:28.738219Z","shell.execute_reply":"2024-09-25T15:06:29.187786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import ImageDataGenerator\n\n# Load CIFAR-10 data\n(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()\nx_train, x_test = x_train / 255.0, x_test / 255.0\ny_train = tf.keras.utils.to_categorical(y_train, num_classes)\ny_test = tf.keras.utils.to_categorical(y_test, num_classes)\n\n# Setup Data Augmentation\ndatagen = ImageDataGenerator(\n    rotation_range=15,\n    width_shift_range=0.1,\n    height_shift_range=0.1,\n    horizontal_flip=True,\n    zoom_range=0.2\n)\ndatagen.fit(x_train)\n","metadata":{"execution":{"iopub.status.busy":"2024-09-25T15:06:44.083822Z","iopub.execute_input":"2024-09-25T15:06:44.084217Z","iopub.status.idle":"2024-09-25T15:06:45.803497Z","shell.execute_reply.started":"2024-09-25T15:06:44.084176Z","shell.execute_reply":"2024-09-25T15:06:45.802521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train the model\nhistory = model.fit(datagen.flow(x_train, y_train, batch_size=64),\n                    epochs=100,\n                    validation_data=(x_test, y_test))\n","metadata":{"execution":{"iopub.status.busy":"2024-09-25T15:06:56.053368Z","iopub.execute_input":"2024-09-25T15:06:56.054087Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}