{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nfrom keras.models import Sequential\nfrom keras.layers import Dense\nfrom keras.layers import LSTM\nfrom keras.layers import Dropout\nfrom keras.layers import Conv1D,Conv2D\nfrom sklearn.preprocessing import MinMaxScaler\nfrom keras.optimizers import Adam\nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nfrom keras.layers import Flatten\nfrom keras.layers import Dropout,Activation\nfrom keras.layers.convolutional import Conv1D\nfrom keras.layers.convolutional import MaxPooling1D\nimport pickle\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train=pd.read_csv('/kaggle/input/conways-reverse-game-of-life-2020/train.csv')\nprint(df_train.iloc[:,1:627].columns)\nprint(df_train.iloc[:,627:].columns)\n\nfor del_c in range(1,6):\n\n    df_train_grouped=df_train.groupby('delta')\n    selected_df_train=df_train_grouped.get_group(del_c)\n\n    output_column_name_list=selected_df_train.iloc[:,1:627].columns\n\n    input_data_df=pd.DataFrame()\n    input_data_df=selected_df_train.iloc[:,627:]\n    # input_data_df['delta']=selected_df_train['delta'].tolist()\n    np_input_data=input_data_df.values\n\n    # np_input_data=np_input_data.reshape(-1,1)\n\n    print(f'Input Data {np_input_data}')\n    print(f'Input shape {np_input_data.shape}')\n\n    output_data_df=pd.DataFrame()\n    output_data_df=selected_df_train.iloc[:,2:627]\n    np_output_data=output_data_df.values\n    # np_output_data=np_output_data.reshape(-1,1)\n\n    print(f'Output Data {np_output_data}')\n    print(f'Output shape {np_output_data.shape}')\n\n\n    def reshape_input(X):\n        return X.reshape(X.shape[0], X.shape[1], X.shape[2], 1)\n\n    complete_input_array=[]\n\n\n    for i in range(np_input_data.shape[0]):\n\n        row_array=[]\n        np_input = np.empty((0,25), int)\n        column_count=1\n        for j in range(np_input_data.shape[1]):\n\n            if column_count < 26:\n                row_array.append(np_input_data[i][j])\n\n                if column_count == 25:\n                    np_input=np.append(np_input,np.array([np.asarray(row_array)]), axis=0)\n                    row_array=[]\n                    column_count=0\n\n            column_count=column_count+1\n\n\n\n        complete_input_array.append(np_input)\n\n    complete_input_array_=reshape_input(np.asarray(complete_input_array))\n\n\n    complete_output_array=[]\n\n    for i in range(np_output_data.shape[0]):\n\n        row_array=[]\n        np_input = np.empty((0,25), int)\n        column_count=1\n        for j in range(np_output_data.shape[1]):\n\n            if column_count < 26:\n                row_array.append(np_output_data[i][j])\n\n                if column_count == 25:\n                    np_input=np.append(np_input,np.array([np.asarray(row_array)]), axis=0)\n                    row_array=[]\n                    column_count=0\n\n            column_count=column_count+1\n\n        complete_output_array.append(np_input)\n    complete_output_array_=reshape_input(np.asarray(complete_output_array))\n\n\n    X_train, X_test, y_train, y_test = train_test_split(complete_input_array_, complete_output_array_, test_size=0.33, random_state=42)\n\n\n    filters = 25\n    kernel_size = (3, 3) # look at all 8 neighboring cells, plus itself\n    strides = 1\n    hidden_dims = 128\n\n    model = Sequential()\n    model.add(Conv2D(\n        filters, \n        kernel_size,\n        padding='same',\n        activation='relu',\n        strides=strides,\n        input_shape=(25, 25, 1)\n    ))\n    model.add(Conv2D(\n        filters, \n        kernel_size,\n        padding='same',\n        activation='relu',\n        strides=strides,\n        input_shape=(25, 25, 1)\n    ))\n    model.add(Dense(256))\n    model.add(Activation('relu'))\n    model.add(Dense(128))\n    model.add(Activation('relu'))\n    model.add(Dense(64))\n    model.add(Activation('relu'))\n    model.add(Dense(32))\n    model.add(Activation('relu'))\n    model.add(Dense(1))\n    model.add(Activation('sigmoid'))\n\n    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n    batch_size=256\n    epochs=100\n    model.fit(X_train, y_train, \n            batch_size=batch_size, \n            epochs=epochs,\n            validation_data=(X_test, y_test)\n        )\n    \n    model_name='delta_'+str(del_c)+'.h5'\n    model.save(model_name)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def reshape_input(X):\n    return X.reshape(X.shape[0], X.shape[1], X.shape[2], 1)\n\ndf_test=pd.read_csv('/kaggle/input/conways-reverse-game-of-life-2020/test.csv')\nprint(df_test)\ndelta_list=df_test['delta'].tolist()\nnp_input_data=df_test.iloc[:,2:].values\nprint(np_input_data)\ncomplete_input_array=[]\n\n\nfor i in range(np_input_data.shape[0]):\n    \n    row_array=[]\n    np_input = np.empty((0,25), int)\n    column_count=1\n    for j in range(np_input_data.shape[1]):\n       \n        if column_count < 26:\n            row_array.append(np_input_data[i][j])\n            \n            if column_count == 25:\n                np_input=np.append(np_input,np.array([np.asarray(row_array)]), axis=0)\n                row_array=[]\n                column_count=0\n        \n        column_count=column_count+1\n    \n    \n    \n    complete_input_array.append(np_input)\n\ncomplete_input_array_=reshape_input(np.asarray(complete_input_array))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\n# result = (result > 0.2).astype(int)\n# print(result.flatten().reshape((25, 25)))\n\n# print(result.flatten().reshape(-1,625))\n#complete_input_array_.shape[0]\n\nfrom tensorflow import keras\n\nlist_=[]\n\nfor j in range(len(delta_list)):\n\n    for i in range(complete_input_array_.shape[0]):\n        \n        if delta_list[j]==1:\n            model= keras.models.load_model('delta1_model.h5')\n        elif delta_list[j]==2:\n            model= keras.models.load_model('delta2_model.h5')\n        elif delta_list[j]==3:\n            model= keras.models.load_model('delta3_model.h5')\n        elif delta_list[j]==4:\n            model= keras.models.load_model('delta4_model.h5')\n        elif delta_list[j]==5:\n            model= keras.models.load_model('delta5_model.h5')\n    \n        result=model.predict_on_batch(complete_input_array_[i:i+1])\n        result = (result > 0.4).astype(int)\n        list_.append(result.flatten().reshape(-1,625)[0])\n    \n# print(np.asarray(list_))\nsubmission_df = pd.DataFrame(np.asarray(list_),columns=list(output_column_name_list[1:]))\nprint(submission_df)\n# print(submission_df)\n\n\ndf_sample=pd.read_csv('/kaggle/input/conways-reverse-game-of-life-2020/sample_submission.csv')\n\nsubmission_df.insert(0,'id', df_sample['id'].tolist())\nprint(submission_df)\n\nsubmission_df.to_csv('submission.csv',index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\n# import numpy as np\n# import matplotlib.pyplot as plt\n\n# H = np.array([[1, 2, 3, 4],\n#               [5, 6, 7, 8],\n#               [9, 10, 11, 12],\n#               [13, 14, 15, 16]])  # added some commas and array creation code\n\n# fig = plt.figure(figsize=(6, 3.2))\n\n# ax = fig.add_subplot(111)\n# ax.set_title('colorMap')\n# plt.imshow(complete_input_array_[0][1])\n# ax.set_aspect('equal')\n\n# # cax = fig.add_axes([0.12, 0.1, 0.78, 0.8])\n# cax.get_xaxis().set_visible(False)\n# cax.get_yaxis().set_visible(False)\n# cax.patch.set_alpha(0)\n# cax.set_frame_on(False)\n# plt.colorbar(orientation='vertical')\n# plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}