{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport matplotlib.pyplot as plt\nimport numpy as np\nimport tensorflow as tf\nimport os\nfrom shutil import copyfile\n\nimport random\nrandom.seed(7)\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.models import Sequential\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D\n\n# Makes new directories to store cell image types\ndef classify_dir(my_data_dir, classes):\n    new_train_dir = \"train_class\"\n    new_val_dir = \"val_class\"\n    train_path = os.path.join(my_data_dir, new_train_dir)\n    val_path = os.path.join(my_data_dir, new_val_dir)\n    for folder in classes:\n        os.makedirs(os.path.join(train_path,folder), exist_ok=True)\n        os.makedirs(os.path.join(val_path,folder), exist_ok=True)\n\n# Returns imageID with corresponding cell type, along with number of imageID's\ndef train_csv_parser(csv_path):\n    df = pd.read_csv(csv_path, sep=',',usecols = ['id','cell_type'])\n    unique_df = df.drop_duplicates()\n    my_data = unique_df.to_numpy()\n    num_pics = len(my_data)\n    for x in range(num_pics):\n        my_data[x][0] = my_data[x][0] + \".png\"\n    return my_data, num_pics\n\n# Copies input images into correct corresponding cell type directory\ndef sep_cell_classes(id_and_type, num_pics, train_data_dir, my_train_dir, my_val_dir):\n    l = list(range(num_pics))\n    random.shuffle(l)\n    for x in range(round(0.8*num_pics)):\n        copyfile(os.path.join(train_data_dir, id_and_type[l[x]][0]), os.path.join(my_train_dir, id_and_type[l[x]][1], id_and_type[l[x]][0]))\n    for y in range(round(0.8*num_pics)+1, num_pics):\n        copyfile(os.path.join(train_data_dir, id_and_type[l[y]][0]), os.path.join(my_val_dir, id_and_type[l[y]][1], id_and_type[l[y]][0]))\n        \nmy_data_dir = './'\nmy_data_train = os.path.join(my_data_dir, 'train_class')\nmy_data_val = os.path.join(my_data_dir, 'val_class')\ndata_dir = '../input/sartorius-cell-instance-segmentation/'\ntrain_data_dir = '../input/sartorius-cell-instance-segmentation/train'\nclasses = ['shsy5y', 'cort', 'astro']\n\nepochs = 15\nbatch_size = 30\n\nclassify_dir(my_data_dir, classes)\nid_and_type, num_pics = train_csv_parser('../input/sartorius-cell-instance-segmentation/train.csv')\nsep_cell_classes(id_and_type, num_pics, train_data_dir, my_data_train,  my_data_val)\n    \ntrain_datagen = ImageDataGenerator(rescale=1./255) \ntrain_generator = train_datagen.flow_from_directory(my_data_train,target_size=(704, 520)) \nval_generator = train_datagen.flow_from_directory(my_data_val,target_size=(704, 520))\n\n\nmodel = Sequential()\nmodel.add(Conv2D(16, 3, padding='same', activation='relu', input_shape=(704,520, 3)))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Conv2D(32, 3, padding='same', activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Conv2D(64, 3, padding='same', activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Flatten())\nmodel.add(Dropout(0.2))\nmodel.add(Dense(512, activation='relu'))\nmodel.add(Dropout(0.2))\nmodel.add(Dense(3))\n\n\nmodel.compile(optimizer='adam',loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),metrics=['accuracy'])\n\n\n\nhistory = model.fit_generator(\n    train_generator,\n    steps_per_epoch=int(np.ceil(train_generator.n / float(batch_size))),\n    epochs=epochs,\n    validation_data=val_generator,\n    validation_steps=int(np.ceil(val_generator.n / float(batch_size)))\n)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-12-12T00:55:10.964577Z","iopub.execute_input":"2021-12-12T00:55:10.965344Z"},"trusted":true},"execution_count":null,"outputs":[]}]}