{"cells":[{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import os\nfrom os import listdir\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nfrom matplotlib.pyplot import figure, imshow, axis\nfrom matplotlib.image import imread\n\nimport skimage.io\nfrom skimage.transform import resize\nfrom imgaug import augmenters as iaa\nimport pandas as pd\nimport seaborn as sns\nfrom tqdm import tqdm\n\nimport keras\nfrom keras import optimizers\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom keras.optimizers import SGD","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2de6b6ad40a9888e8d59e7f09829b6bbdd362401"},"cell_type":"code","source":"labels = pd.read_csv('../input/train.csv')\ntest_path = \"../input/test/\"\ntrain_path = \"../input/train/\"\n\ncolors = [\"blue\", \"green\", \"red\", \"yellow\"] ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ff5968f32b5df163b5fb8e8d655eca98cec11eab"},"cell_type":"code","source":"labels.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"909ec9022c57052fa73ec1e09ce3daec4625d657"},"cell_type":"code","source":"test = []\nfor file in listdir(test_path):\n    fname = file.split(\"_\")[0]\n    test.append(fname)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b5ce4ec5e647551fd4391bfbcd6a2a13d121fb6e"},"cell_type":"code","source":"def get_label(label):\n    \n    num = list(map(int, label.split()))\n\n    return np.eye(28, dtype=np.float)[num].sum(axis=0) # convert an array to one-hot coded then sum along the columns","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ab4ddcacacdfbf0e275e5cddad80e22ff933d8fd"},"cell_type":"code","source":"# display 4 channels of an image id\ndef showImagesHorizontally(file_num):\n    # file_num is a list of integers\n    fname = f\"{train_path}{labels.Id[file_num]}_\"\n    \n    fig = figure(figsize=(15,5))\n    imgs = [fname + x + \".png\" for x in colors]\n    \n    for i in range(len(colors)):\n        a = fig.add_subplot(1, 4, i+1)\n        img = plt.imread(imgs[i])\n        plt.title(f'{colors[i]}')\n        plt.imshow(img)\n        axis('off')\n        \nshowImagesHorizontally(5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cc4212b1084438e5301c7c60fa5fcb0b0765a4fa"},"cell_type":"code","source":"def rgby_generator(id):\n    im_blue = imread(f\"{train_path}{id}_blue.png\")\n    im_green = imread(f\"{train_path}{id}_green.png\")\n    im_red = imread(f\"{train_path}{id}_red.png\")\n    im_yellow = imread(f\"{train_path}{id}_yellow.png\")\n    \n    rgby = np.stack((im_red, im_green, im_blue, im_yellow),-1)\n    \n    return rgby","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ce342a4d87c8f0b7538b87f8d2caada38417775a"},"cell_type":"code","source":"def ConvBlock(layers, model, filters):\n    for i in range(layers): \n        model.add(Conv2D(filters, (3, 3), activation='relu', padding='same'))\n    model.add(MaxPooling2D((2,2), strides=(2,2)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5b21f4a1fe59a137f29e45697a06c4afda7d5e0e"},"cell_type":"code","source":"def VGG16():  \n    # initialize the model\n    model = Sequential()\n\n    # input layer\n    model.add(Conv2D(64, (3, 3), input_shape=(512, 512, 4), activation='relu', padding='same'))\n    \n    # Conv Block 1\n    ConvBlock(1, model, 64)\n\n    # Conv Block 2\n    ConvBlock(2, model, 128)\n\n    # Conv Block 3\n    ConvBlock(3, model, 256)\n\n    # Conv Block 4\n    ConvBlock(3, model, 512)\n\n    # Conv Block 5\n    ConvBlock(3, model, 512)\n\n    # FC layers\n    model.add(Flatten())\n    model.add(Dense(4096, activation='relu'))\n    model.add(Dense(4096, activation='relu'))\n    model.add(Dense(28, activation='softmax'))\n    \n    return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a794f0452c30fbc3d17e5e797944b03695ca8fe5"},"cell_type":"code","source":"model = VGG16()\n\n# Compile model\nmodel.compile(optimizer= optimizers.Adam(), loss= 'binary_crossentropy', metrics= ['acc'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2c80bbecdc8c0c6a1e1e74e2c41e4bfb11b3e2e2"},"cell_type":"code","source":"x_train = [rgby_generator(labels.Id[i]) for i in tqdm(range(100))]\ny_train = [get_label(y) for y in labels.Target[0:100]]\n\nx_train = np.array(x_train)\ny_train = np.array(y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"38fc7d12f2972545ecc860cd81cf1113b5e7a638"},"cell_type":"code","source":"model.fit(x_train, y_train, epochs=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5c45e1cefcc0ab9899c0bb33c4f423a4ac1fe00e"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"212fc054ee9f0b0355723240181f0cdd4eae26a8"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8bd475a44aae6b398eef37df0a493367cf63eb7d"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9eb9fc390bb0cbeae4e7fca4071a3911c183de26"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"980af471674f0422be4238a109cf65a803981cf9"},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"79d338aa7df851a05f0d4d66eb38f7c783e4d306"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}