import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

import pandas as pd
import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPool2D, Dropout, Flatten
from keras.losses import categorical_crossentropy
from keras.optimizers import RMSprop, Adam
from keras.metrics import categorical_accuracy
from keras.utils import to_categorical

#read datasets
df_train = pd.read_csv("/kaggle/input/digit-recognizer/train.csv")
df_test = pd.read_csv("/kaggle/input/digit-recognizer/test.csv")

df_train.head()
x_train = df_train.drop('label', axis=1)/255
y_train = to_categorical(df_train['label'])
y_train[0]
x_train.shape
y_train.shape
x_train = np.array(x_train).reshape(42000,28,28,1)

from sklearn.model_selection import train_test_split

#creating model
model = Sequential()
model.add(Conv2D(128, kernel_size=(3,3), activation='relu', input_shape=(28,28,1)))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(128, kernel_size=(3,3), activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(128, kernel_size=(3,3), activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

#flattening the 2d arrays for fully conected layers
model.add(Flatten())
model.add(Dropout(0.1))
model.add(Dense(256, activation = 'relu'))
model.add(Dense(512, activation = 'relu'))
model.add(Dense(256, activation = 'relu'))
model.add(Dense(10, activation = 'softmax'))
model.summary()

# compiling and fitting model
import matplotlib.pyplot as plt
adam = Adam(lr=0.0001)
rms = RMSprop(lr=0.0001)          # minimalkan error
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['categorical_accuracy'])
history = model.fit(x_train, y_train, validation_split=0.2, epochs=30, verbose=1, batch_size=256)

#prediction
df_test.head()
x_test = np.array(df_test/255).reshape(28000,28,28,1)
pred = model.predict_classes(x_test, batch_size=128)
pred[0:10]

#make dataframe
s_sub = pd.read_csv ("/kaggle/input/digit-recognizer/sample_submission.csv")
s_sub.head()

digit_prediction = pd.DataFrame(range(1,df_test.shape[0]+1),columns=['ImageId'])
digit_prediction['Label'] = pred
digit_prediction.head()

digit_prediction.to_csv(r'digitRec_CNN.csv')

from IPython.display import FileLink
FileLink(r'digitRec_CNN.csv')

