{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# **Textile Defect Classification Using CNN**","metadata":{}},{"cell_type":"markdown","source":"### **Importing Libraries**","metadata":{}},{"cell_type":"code","source":"#importing relevant libraries\n\nimport numpy as np \nimport pandas as pd \nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n for filename in filenames:\n print(os.path.join(dirname, filename))\n \nimport h5py\nimport cv2\nfrom PIL import Image\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport pickle\nimport matplotlib.image as mpimg\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\n\n\nimport tensorflow as tf\nimport keras\nfrom keras import layers\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.models import Sequential\nfrom keras.layers.core import Flatten, Dense, Dropout\nfrom keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D\n\n","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"/kaggle/input/textiledefectdetection/train64.h5\n/kaggle/input/textiledefectdetection/matchingtDATASET_test_32.h5\n/kaggle/input/textiledefectdetection/test32.csv\n/kaggle/input/textiledefectdetection/train32.csv\n/kaggle/input/textiledefectdetection/test32.h5\n/kaggle/input/textiledefectdetection/train32.h5\n/kaggle/input/textiledefectdetection/test64.csv\n/kaggle/input/textiledefectdetection/matchingtDATASET_train_32.h5\n/kaggle/input/textiledefectdetection/matchingtDATASET_test_64.h5\n/kaggle/input/textiledefectdetection/matchingtDATASET_train_64.h5\n/kaggle/input/textiledefectdetection/test64.h5\n/kaggle/input/textiledefectdetection/train64.csv\n/kaggle/input/fabric-defects/download (3).jpeg\n/kaggle/input/fabric-defects/download (4).jpeg\n/kaggle/input/fabric-defects/download (6).jpeg\n/kaggle/input/fabric-defects/download.jpeg\n/kaggle/input/fabric-defects/download (1).jpeg\n/kaggle/input/fabric-defects/images (1).jpeg\n/kaggle/input/fabric-defects/download (5).jpeg\n/kaggle/input/fabric-defects/Hole.png\n/kaggle/input/fabric-defects/Broken-pick.png\n/kaggle/input/fabric-defects/download (2).jpeg\n","output_type":"stream"}]},{"cell_type":"code","source":"#loading fabric images\n\nfilename = \"../input/textiledefectdetection/train64.h5\"\n\nwith h5py.File(filename, \"r\") as f:\n print(\"Keys: %s\" % f.keys())\n a_group_key = list(f.keys())[0]\n X_train = np.array(f[a_group_key])\n \n \nfilename = \"../input/textiledefectdetection/test64.h5\"\n\nwith h5py.File(filename, \"r\") as f:\n print(\"Keys: %s\" % f.keys())\n a_group_key = list(f.keys())[0]\n X_test = np.array(f[a_group_key])","metadata":{"trusted":true},"execution_count":2,"outputs":[{"name":"stdout","text":"Keys: \nKeys: \n","output_type":"stream"}]},{"cell_type":"code","source":"X = np.concatenate((X_train, X_test))\nX.shape","metadata":{"trusted":true},"execution_count":3,"outputs":[{"execution_count":3,"output_type":"execute_result","data":{"text/plain":"(96000, 64, 64, 1)"},"metadata":{}}]},{"cell_type":"code","source":"#creating dataframe\n\ndf_train = pd.read_csv(\"../input/textiledefectdetection/train64.csv\")\ndf_test = pd.read_csv(\"../input/textiledefectdetection/test64.csv\")\ndf = pd.concat([df_train,df_test])\ndf.shape","metadata":{"trusted":true},"execution_count":4,"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"(96000, 5)"},"metadata":{}}]},{"cell_type":"markdown","source":"### **Exploratory Data Analysis**","metadata":{}},{"cell_type":"code","source":"plt.imshow(X[40000])\n","metadata":{"trusted":true},"execution_count":5,"outputs":[{"execution_count":5,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","source":"#plotting the type of defect or no defect categorically\n\nplt.figure(figsize=(10, 6), dpi=80)\nsns.countplot(x='indication_type', data=df);","metadata":{"trusted":true},"execution_count":6,"outputs":[{"output_type":"display_data","data":{"text/plain":"
","image/png":"iVBORw0KGgoAAAANSUhEUgAAArUAAAGcCAYAAADH61giAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAxOAAAMTgF/d4wjAAAhKUlEQVR4nO3deZhldX3n8fcHG3EpbdTQaaDBJrIlimlHiCGC4OAWzUJEjUu79CQRkkhkOjomaIzRZALJiFGZCIzO05ElY0RDFjMY4wIIdEQR2QI0o23brEIkgI5Ayzd/3FPmUnR1V92qW7d+t9+v5zlPn/P7nuV37qlb/bmnfvfeVBWSJElSy3YadQckSZKkuTLUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvOWjLoDi8Euu+xSu+2226i7IUmSpGncdNNN91fVLtPVDbXAbrvtxubNm0fdDUmSJE0jybe3VXf4gSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWre0ENtkg8k2Zikkqzqa98lyalJNiS5KslZfbX9klyS5IYklyV56lxrkiRJGl8Lcaf2XOAw4JtT2k8CCti/qg4C3tJXOx04o6r2B04G1s1DTZIkSWMqVbUwB0o2AkdX1RVJHgvcAqyoqrunrLcMuBF4YlVtSZJu3cOAuwepVdWN2+rbihUravPmzfN5upIkSZpHSW6qqhXT1Uc1pvYpwL8CJyb5cpKLkhzV1fYCbqmqLQDVS92bgL3nUJMkSdIYWzLC4z4ZuLaqfifJM4DPLNQY2CRrgbWTy0uXLp3xts9860eH0aUdzlf+9HXzvs9N7z5o3ve5o9r7nVfN6/6e/cFnz+v+dmQXH3/xvO/zguccMe/73BEdceEF877PU3/77+Z9nzuqN7335+d1f3+0+mXzur8d2dvPOnde9jOqO7WbgAeBswGq6qvAN4CDgG8BuydZAtANI9i722bQ2kNU1SlVtWJympiYGOa5SpIkachGEmqr6g7gs8ALAZLsA+wD/EtV3Q5cDqzuVj8G2FxVNw5aW4hzkiRJ0ugMffhBktOBlwDLgU8nuaeq9gWOAz6S5GR6d22Praqbus2OBdYlOZHeG8DW9O1y0JokSZLG1NBDbVUdO03714HnTlO7Hjh0PmuSJEkaX36jmCRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktQ8Q60kSZKaZ6iVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvOGHmqTfCDJxiSVZNVW6mu62tF9bcuSnJ9kQ5KrkzxnrjVJkiSNr4W4U3sucBjwzamFJCuBXwPWTymdBKyvqv2ANcA5SXaeY02SJEljauihtqourKrNU9uT7AR8GDgeuG9K+RXAad32lwE3A0fMsSZJkqQxNcoxtWuBi6vqK/2NSZ4E7FxVt/Y1bwT2HrQ2hL5LkiRpEVkyioMmeRpwDDCSMa9J1tIL1QAsXbp0FN2QJEnSPBnVndrDgZXAhiQbgZ8Gzkjy61V1J7AlyfK+9VcCmwatTT14VZ1SVSsmp4mJifk7M0mSJC24kYTaqvpQVe1eVSuraiW9N4q9sao+1K3yceA4gCSHAHsCF8yxJkmSpDE19OEHSU4HXgIsBz6d5J6q2nc7m70NODPJBuB+YHVVPTDHmiRJksbU0ENtVR07g3WOnLJ8G/CCadYdqCZJkqTx5TeKSZIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktQ8Q60kSZKaZ6iVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYNPdQm+UCSjUkqyaqu7VFJzktyQ5KvJflMkn37tlmW5PwkG5JcneQ5c61JkiRpfC3EndpzgcOAb05pPwM4oKp+Evgb4MN9tZOA9VW1H7AGOCfJznOsSZIkaUwNPdRW1YVVtXlK2/er6h+qqrqm9cDKvlVeAZzWrXsZcDNwxBxrkiRJGlOLZUztm+ndrSXJk4Cdq+rWvvpGYO9Ba1MPlmRtks2T07333juvJyNJkqSFNfJQm+REYF/gdxfqmFV1SlWtmJwmJiYW6tCSJEkagpGG2iRvAV4K/GxVfQ+gqu4EtiRZ3rfqSmDToLXhnYEkSZIWg5GF2iRrgVcBz6+qu6aUPw4c1613CLAncMEca5IkSRpTS4Z9gCSnAy8BlgOfTnIPcCTwXuDrwOeTANxXVc/qNnsbcGaSDcD9wOqqemCONUmSJI2poYfaqjp2mlK2sc1twAvmsyZJkqTxNfI3ikmSJElzZaiVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktQ8Q60kSZKaZ6iVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzhh5qk3wgycYklWRVX/t+SS5JckOSy5I8dZg1SZIkja+FuFN7LnAY8M0p7acDZ1TV/sDJwLoh1yRJkjSmhh5qq+rCqtrc35ZkGXAwcFbX9AlgryT7DqM2rHOTJEnS4jCqMbV7AbdU1RaAqipgE7D3kGoPkWRtks2T07333jvUk5UkSdJw7ZBvFKuqU6pqxeQ0MTEx6i5JkiRpDpaM6LjfAnZPsqSqtiQJvTuqm4C7h1CTJEnSGBvJndqquh24HFjdNR0DbK6qG4dRG/4ZSZIkaZSGfqc2yenAS4DlwKeT3FNV+wLHAuuSnEjvLuuavs2GUZMkSdKYGnqorapjp2m/Hjh0oWqSJEkaXzvkG8UkSZI0Xgy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUvBmH2iRPn0mbJEmStNBmc6d23QzbJEmSpAW1ZHsrJFkGLAceneQgIF1pKfDYIfZNkiRJmpHthlrgVcAJwB7A3/a1/xvwJ0PokyRJkjQr2w21VfV+4P1Jfq+q3rMAfZIkSZJmZSZ3agGoqvck2YneUIQlfe2bhtExSZIkaaZmHGqTvB74IPAA8GDXXMCyIfRLkiRJmrEZh1rgncAhVXX9sDojSZIkDWI2H+l1h4FWkiRJi9FsQu15SU5IsizJ4yenofVMkiRJmqHZDD/4o+7fU+iNpU337yPmu1OSJEnSbMzm0w9mc1dXkiRJWjAGVUmSJDVvNh/p9SC94QYPUVUOP5AkSdJIzWZM7eP65h8NvA7H00qSJGkRmPHwg6r6bt90R1WdArxsiH2TJEmSZmTgMbVJDgR+ZB77IkmSJA1kNmNqv8N/jKmd3O74ee+RJEmSNEuzGVO7qm9+C3BrVf1gfrsjSZIkzd5sxtR+E/g2sCfwZGCXuR48yYuTXJ7kiiRXJ3l9174syflJNnTtz+nbZqCaJEmSxtdshh/8DPAJ4Nau6UeTHFNVlw5y4CQBzgKOrKork6wErkvySeAkYH1VvSjJIcBfJ9mnqh6YQ02SJEljajZvFDsFeFlVPaOqnkHvkw/eN8fjF7BrN/944E7gPuAVwGkAVXUZcDNwRLfeoDVJkiSNqdmMqX10VV08uVBVlyR51KAHrqpK8svAJ5N8F3gC8FJ6n4e7c1Xd2rf6RmDvJE8apDb12EnWAmsnl5cuXTroaUiSJGkRmM2d2nuTPG9yIclRwHcHPXCSJcA7gJdW1ZOBo4AzmV3QHkhVnVJVKyaniYmJYR9SkiRJQzSbAPlb9O6qTn7iwU707qwOahWwR1VdCL3hAkk2A08HtiRZ3nfXdSWwqaruTDLr2hz6KEmSpAbM5k7tHsDBwC900yHA7nM49reA3ZP8OECSfYGnANcDHweO69oPofeJCxd02w1akyRJ0piazZ3a91TVKnof6zX56QXvAT41yIGr6rYkbwT+KsmD9AL2m6pqU5K3AWcm2QDcD6zu+wSDQWuSJEkaUwOPX+3e6PWIuRy8qv4S+MuttN8GvGCabQaqSZIkaXzNZvjBPd1n1QKQ5NnAPfPfJUmSJGl2ZnOn9r/R+zKD67rl/YBfmv8uSZIkSbMz41BbVZd2b+o6tGu6pKruGkqvJEmSpFmY1ZjaqvoO8A9D6oskSZI0kNmMqZUkSZIWJUOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktQ8Q60kSZKaZ6iVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeSMNtUl2SXJqkg1JrkpyVte+X5JLktyQ5LIkT+3bZqCaJEmSxteo79SeBBSwf1UdBLylaz8dOKOq9gdOBtb1bTNoTZIkSWNqZKE2yWOBXwHeXlUFUFW3JlkGHAyc1a36CWCvJPsOWluYM5IkSdKojPJO7VOAfwVOTPLlJBclOQrYC7ilqrYAdIF3E7D3HGqSJEkaY6MMtUuAJwPXVtXBwG8BH+vahyrJ2iSbJ6d777132IeUJEnSEI0y1G4CHgTOBqiqrwLfoBd0d0+yBCBJ6N1t3QR8a8DaQ1TVKVW1YnKamJgY6olKkiRpuEYWaqvqDuCzwAsBkuwD7ANcDFwOrO5WPQbYXFU3VtXtg9QW4nwkSZI0OkP/U/92HAd8JMnJ9O7aHltVNyU5FliX5ETgbmBN3zaD1iRJkjSmRhpqq+rrwHO30n49cOg02wxUkyRJ0vga9efUSpIkSXNmqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktQ8Q60kSZKaZ6iVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMWRahNsiZJJTm6W16W5PwkG5JcneQ5fesOVJMkSdL4GnmoTbIS+DVgfV/zScD6qtoPWAOck2TnOdYkSZI0pkYaapPsBHwYOB64r6/0CuA0gKq6DLgZOGKONUmSJI2pUd+pXQtcXFVfmWxI8iRg56q6tW+9jcDeg9aG1HdJkiQtEktGdeAkTwOOARZ83GuStfQCNQBLly5d6C5IkiRpHo3yTu3hwEpgQ5KNwE8DZ9AbQrAlyfK+dVcCm6rqzkFqUw9cVadU1YrJaWJiYt5OSpIkSQtvZKG2qj5UVbtX1cqqWknvjWJvrKoPAR8HjgNIcgiwJ3BBt+mgNUmSJI2pkQ0/2I63AWcm2QDcD6yuqgfmWJMkSdKYWjShtqqO7Ju/DXjBNOsNVJMkSdL4GvWnH0iSJElzZqiVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktQ8Q60kSZKaZ6iVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzRhZqkzwqyXlJbkjytSSfSbJvV1uW5PwkG5JcneQ5fdsNVJMkSdL4GvWd2jOAA6rqJ4G/AT7ctZ8ErK+q/YA1wDlJdp5jTZIkSWNqZKG2qr5fVf9QVdU1rQdWdvOvAE7r1rsMuBk4Yo41SZIkjalR36nt92bgb5I8Cdi5qm7tq20E9h60NtReS5IkaeSWjLoDAElOBPYFjgIevQDHWwusnVxeunTpsA8pSZKkIRr5ndokbwFeCvxsVX2vqu4EtiRZ3rfaSmDToLWpx6yqU6pqxeQ0MTExvyclSZKkBTXSUNvdMX0V8Pyququv9HHguG6dQ4A9gQvmWJMkSdKYGtnwgyQrgPcCXwc+nwTgvqp6FvA24MwkG4D7gdVV9UC36aA1SZIkjamRhdqq2gxkmtptwAvmsyZJkqTxNfIxtZIkSdJcGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktQ8Q60kSZKaZ6iVJElS8wy1kiRJap6hVpIkSc0z1EqSJKl5hlpJkiQ1z1ArSZKk5hlqJUmS1DxDrSRJkppnqJUkSVLzDLWSJElqnqFWkiRJzTPUSpIkqXmGWkmSJDXPUCtJkqTmGWolSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpeYZaSZIkNc9QK0mSpOYZaiVJktS8sQu1SfZLckmSG5JcluSpo+6TJEmShmvsQi1wOnBGVe0PnAysG213JEmSNGxjFWqTLAMOBs7qmj4B7JVk39H1SpIkScM2VqEW2Au4paq2AFRVAZuAvUfaK0mSJA1VerlvPCR5JnBOVR3Q1/Yl4Heq6nN9bWuBtX2bLgduXbCODt8EcO+oO6Gt8tosbl6fxctrs3h5bRa3cbo+u1XVLtMVxy3ULgNuBJ5YVVuSBLgFOKyqbhxt7xZOks1VtWLU/dDDeW0WN6/P4uW1Wby8NovbjnR9xmr4QVXdDlwOrO6ajgE270iBVpIkaUe0ZNQdGIJjgXVJTgTuBtaMuD+SJEkasrELtVV1PXDoqPsxYqeMugOaltdmcfP6LF5em8XLa7O47TDXZ6zG1EqSJGnHNFZjaiVJkrRjMtRKkiSpeYbaHVySn0vyhVH3Y0eQZGWSu0bdD81ckjckOXDU/RhXSSrJrrPcxueRdhhJ3pXkUd38uiQnLPDxm8oIhlppkUsydm/obMgbAEOtRqYL8cfNYv1Zv1CYi9n2bxb73SPJRfOwnx+Gwm753UleM9f9LqDfBx613bX6JNkpyQ6Z73bIk25Nkl9M8i9Jvpbk5CR3dL9IDk5ySZIrk3wpybP7tnlt135lkk8l2bNr3znJnyfZ0H3b2nNHdmJjIMmhSb7YXZsru2s17XWZsu0Lk1zerXdBkp/o2o9Mck2SjyS5AvilhTyncTbN9dqYZFXfOl/ursGvAgcD70tyRZIXj6zj4+03uufJN5L88CMYZ/E8OiTJ57rr9tUkL1+4ri+IlcC8h8Z5tJIh9K+qbq6qw+dhVw8JhVX1zqo6ex72O3RJTutmL+r+L1gG/HiSzya5IcknkzyyW/ddST6R5NPA1cDu3f8xX0zyle459Nxu3eVJPt+1X5Pk1MkQ3HxGqCqnRTzR+yG+EziwW14DFLA/sAl4Ydd+GL2v+p0AntbN79nV3g78327+N4HPAo/sps8DXxj1ebY4AU8EbgMO75Z36q7XdNdlJXDXlOt6ULf8GuBaIMCRwIPAEaM+x3GaprleTwQ2Aqv61vsycGQ3/wXg6FH3fVyn7nfZb3fzBwL30PuoyUfO8Hm0K/BVYPdu+Ue67fYc9bn1nd/bgX/ufs6OBn63+xnbMPlz1q37QuCLwFeALwHP7dqvA/4/cAXwt13b/wAu69ouBA6Ycsxdt9OvNd22X+v6srJrfy1wZTd9qu//kDcA/wT8JXBVt82PzaF/231M+q9z33Yndo/NN4A1fbWtHg84rdvuqq62DFgHnNDVJ4D/TS8EXg38ft8+v9Dt9yLg/wGnjfBnaNdufl33uD0GeARwMfCqrvYu4GbgR7vlHwMuBR7fLe9L7xtWd6EX8ie69kcAfw+8sltuOiOMvANO27lA8AvA5/uWdwLuAw4CNk5Z92v0fvkfD6zra39Ct80jgE8Cr++rvbalH9jFNAEvAS6c0rat6/LDX9LAz0993IG7gBX0Qu2Noz6/cZu2dr269o0Yakd1TQpY3rf8ne45MNPn0YuBf6MXWCanTcB/HvW59Z3fm7v5o4B7gTd0yy8HLuvmtxVAjgSumLLf3frmXwmcP+WYu26jT0fSC4WTLwQe003buhnyhu5x3qdbPgk4vW9/s+3fTB6TH17nvu0e9gJoto8HDw21JwNn0/t/9bH0XiD9clf7AvDX9F5kPbp7zA4d0c/Qrn19/52+2vuAd3Tz7wI+3Ff7DeDbPPS5cROwX3e9/ye959SV3XU/qduu6YzgWL3xMt2HDm/rw4j9oOLhG+Qxvnfee6HpbKH3gm/SrMavac6+3zf/A6b/UqCtPY8CXFNVPzPvvZo/H+v+/TK94PR/uuUv0QsYAC+iF2QvTDK53YPA3tPs8/lJjgcex3/8xWGmXgKcWVW3AFTV9wC6P02fX1U3dev9OfDOJJPPjUur6huT8/Runkxne/2byWOyNWd3fb4uyRZgObB5BsebzvPoBeUHge8m+Sjw/L7+fayqtgBbuj//P4XeuY/Stp4v/f9vBPhMVb166g6SvIPeXetnVdX3k5zC9L/3msoIjqld/NYDT09yQLe8mt6fBO4DdkryfIAkP0PvCX4FvT8XvCjJHt02xwGfraof0PsT0upu3Mwj8WuE5+ISYL8kh0NvcD69P29Pd136rQcOSvK0br1X0nsVfRMaloddryRPBG4EntW1/RRwQN82dwNLF7qj4npm9jy6BNgnyfMmG5KsmhxnuEhMhpAfAFRV//JkIJkMIKv6pj2rasPUnSXZGzgVWF1VT6N3Z3IYL8SmhpkZvfiYYf9m8phszcP6MM+Px0DnPGT3MNjvoE8Dz0vy9MmG7vcb9P56e2sXaJfTu0M+qemMYKhd5KrqduBXgfO6V4oH0Xs1djvwUuAPklwJ/Bnwsqq6t6quBt4KnN/VDgd+rdvl/6I3bulaeuO3rliwkxkzVfUdem/iOql7nC+nF462el2mbPtteuNoP9qt9+vAy6v7e4/m3zTX69nAO4DfTPI14L8A1/RtdgZwom8UW1hVdT8zex59h96dxxO7N/9dS+9P463937atADL1hdVS4AHglvRu675plsf6O3qhZffuOI9J8hi2fTNkW+a7f7O1veNtKxT+E/Ar6XksvT+1/+PQejqY9wKf6Xuj2IxU1Y3Aq4HTu+fGvwAndOX3A89Kcg1wJr3HYVLTGcGvyW1AksdV1T3d/NHAH1fVj4+2V5KkbUlSwBOq6q4kE8A9VZWutgK4rqomuuXnAe+hN97xkcBXq+rV6X2k33n0xph+vap+Icn76b3f4s6u9paq2nXqMbfRr9cDv03vzuT99F4wfDPJa+ndEAH4FvDGqropyRvojS0/utv+57pjHjmX/m3rMUmykt5Y3a2eV5I7gIOrauN2jvf79G4gfA94AfAn3X7/rDv+B4DJFxAfr6o/6Lb7AvBnVXVet3wu8PdVtW66x1WjZ6htQJITgV+mN+7vbuBNVXX5aHslSZK0eBhqJUmS1Dw//UCSpDGT5Ms8/P/4a6qqpW/TkmbFO7WSJElqXmvvEJUkSZIexlArSZKk5hlqJUmS1DxDrSTNUvdlDI8bYLtzu8/8JMm7kwz8pp0kRyZ5Ud/yHkkuGnR/szmWJC1GfvqBJM1SVa2ah328c467OBLYFTi/29/N9L49cBgecixJWoy8UytJs5SkkuzazW/s7rpemuQbSd7Rt96BSS5Jck2S84DH99XWJTmhm39kkj9NcnX3lZbnd+0HJfliksuTXDu57ySr6H2N6Wu6u8bvTLIyyV19+39ht92VSS5I8hNd+5Hdcf68O9Y1SQ7exrlu7Vindl8KM7nOAUm+lWRJkncl+USSzyW5LsnfJXlSt97OSU5K8qVuX3+V5AlzuhiS1DHUStLc7VpVhwKHAG9NsmfXfibwkap6KvB7wBHTbP+7wP7AM6vqJ+l9Bz3ARuCoqvpPwDOBY5L8dFVdAZwGnF1Vq6rq3f07S7IMOAd4fVU9HTgDODdJulUOBP6iO9YHgT+a7sSmOdYHgTcmeUS32m8AZ1TVlm75cODVVXUgva9b/eOu/a3Ad6vqp7q73VcBfzjdsSVpNgy1kjR35wBU1R3A14F9kjweWAWs62pXAV+cZvufA95fVfd16367a3808OEkVwHrgSd3+9yeZwFXdcekqs4G9gAmw/aNVfXP3fylwFNmcpKTqup64FrgF5M8FngVveA86VNVdWs3fwbwvG7+aGB1d5f2im67fWZzbEmajmNqJWnuvt83/wOm/90622+7+e/AHcAzqmpLkk8Cjxqgf1PNtL/b8n7gbcBuwGeq6rZtrDt53gGOr6p/HOB4krRN3qmVpCGoqruBrwKvA0jyVOCwaVb/W+DNSXbp1t2ta38CsLkLtAcAz+/b5m5g6TT7Ww8clORp3f5eCdzUTYPY2rH+EVgOvAM4dUrtxUl+tJv/VeCfuvnzgP+a5DFdvx7TPS6SNGeGWkkantfRG3t6Nb2xoxdOs97JwA3A5d2f5f+ia/9DYE2SK4GTgM/1bfPXwKrJN2/176wbvvAa4KPdtr8OvLwG/170hx2r29dHgNur6tIp618EnJPkOnpDJibfVHYycBnwz12/1jOz4RSStF0Z/HecJGlHluTvgY9V1Zl9be+i98a5E0bVL0k7Ju/USpJmJcnBSW4EHqR7k5wkjZp3aiVJk59Hu24rpb+oqvctbG8kafYMtZIkSWqeww8kSZLUPEOtJEmSmmeolSRJUvMMtZIkSWqeoVaSJEnNM9RKkiSpef8O6RoZQ4ExRVwAAAAASUVORK5CYII=\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":"### **Data Transformation & train-test splitting**","metadata":{}},{"cell_type":"code","source":"#Extracting labels(type of defects) from the whole dataframe\n\ny = df[[\"indication_type\"]]\ny = pd.get_dummies(y)\ny.columns = ['Color','Cut','No Defect','Hole','Metal_Contamination','Thread']\n\ny[:5]","metadata":{"trusted":true},"execution_count":7,"outputs":[{"execution_count":7,"output_type":"execute_result","data":{"text/plain":" Color Cut No Defect Hole Metal_Contamination Thread\n0 0 0 1 0 0 0\n1 0 0 1 0 0 0\n2 0 0 1 0 0 0\n3 0 0 1 0 0 0\n4 0 0 1 0 0 0","text/html":"
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ColorCutNo DefectHoleMetal_ContaminationThread
0001000
1001000
2001000
3001000
4001000
\n
"},"metadata":{}}]},{"cell_type":"code","source":"X.shape, y.shape","metadata":{"trusted":true},"execution_count":8,"outputs":[{"execution_count":8,"output_type":"execute_result","data":{"text/plain":"((96000, 64, 64, 1), (96000, 6))"},"metadata":{}}]},{"cell_type":"code","source":"#splitting randomly to remove order\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)\nX_train.shape,X_test.shape,y_train.shape,y_test.shape","metadata":{"trusted":true},"execution_count":50,"outputs":[{"execution_count":50,"output_type":"execute_result","data":{"text/plain":"((64320, 64, 64, 1), (31680, 64, 64, 1), (64320, 6), (31680, 6))"},"metadata":{}}]},{"cell_type":"code","source":"# X_train = X_train[:int(len(X_train)/3)][:][:][:]\n# X_test = X_test[:int(len(X_test)/5)][:][:][:]\n# y_train = y_train[:int(len(y_train)/3)][:][:][:]\n# y_test = y_test[:int(len(y_test)/5)][:][:][:]\n\n# X_train.shape,X_test.shape,y_train.shape,y_test.shape","metadata":{"trusted":true},"execution_count":46,"outputs":[{"execution_count":46,"output_type":"execute_result","data":{"text/plain":"((21440, 64, 64, 1), (6336, 64, 64, 1), (21440, 6), (6336, 6))"},"metadata":{}}]},{"cell_type":"markdown","source":"### **Image Data Generator**","metadata":{}},{"cell_type":"code","source":"#transforming and creating batches to feed in our model\n\ndatagen = ImageDataGenerator(\n featurewise_center=True,\n featurewise_std_normalization=True,\n rotation_range=20,\n width_shift_range=0.2,\n height_shift_range=0.2,\n horizontal_flip=True)\n\ndatagen.fit(X_train)\nbs=32\n\ntrain_batches = datagen.flow(X_train, y_train, batch_size=bs)\ntest_batches = datagen.flow(X_test, y_test, batch_size=bs)\ntype(train_batches)","metadata":{"trusted":true},"execution_count":51,"outputs":[{"execution_count":51,"output_type":"execute_result","data":{"text/plain":"tensorflow.python.keras.preprocessing.image.NumpyArrayIterator"},"metadata":{}}]},{"cell_type":"markdown","source":"### **CNN MODEL**","metadata":{}},{"cell_type":"code","source":"#model building\n\nmodel = Sequential()\nmodel.add(layers.Conv2D(100, (3, 3), activation='relu', input_shape=(64, 64, 1)))\nmodel.add(layers.MaxPooling2D((2, 2)))\nmodel.add(layers.Conv2D(64, (3, 3), activation='relu'))\nmodel.add(layers.MaxPooling2D((2, 2)))\nmodel.add(layers.Conv2D(64, (3, 3), activation='relu'))\nmodel.add(layers.Flatten())\nmodel.add(layers.Dense(32, activation='relu'))\nmodel.add(layers.Dense(6,activation='softmax'))\n\nmodel.compile(keras.optimizers.Adam(lr=.001), loss='categorical_crossentropy', metrics=['accuracy'])\n","metadata":{"trusted":true},"execution_count":52,"outputs":[]},{"cell_type":"code","source":"model.fit(train_batches, steps_per_epoch=len(X_train) //bs, validation_data=test_batches,\n validation_steps=len(X_test)//bs, epochs=50, verbose=1)","metadata":{"trusted":true},"execution_count":53,"outputs":[{"name":"stdout","text":"Epoch 1/50\n2010/2010 [==============================] - 70s 34ms/step - loss: 1.2056 - accuracy: 0.5051 - val_loss: 0.8084 - val_accuracy: 0.6569\nEpoch 2/50\n2010/2010 [==============================] - 70s 35ms/step - loss: 0.7871 - accuracy: 0.6734 - val_loss: 0.7191 - val_accuracy: 0.7002\nEpoch 3/50\n2010/2010 [==============================] - 70s 35ms/step - loss: 0.7037 - accuracy: 0.6996 - val_loss: 0.6378 - val_accuracy: 0.7267\nEpoch 4/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.6519 - accuracy: 0.7219 - val_loss: 0.6195 - val_accuracy: 0.7340\nEpoch 5/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.6140 - accuracy: 0.7367 - val_loss: 0.5942 - val_accuracy: 0.7454\nEpoch 6/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.5821 - accuracy: 0.7465 - val_loss: 0.5565 - val_accuracy: 0.7611\nEpoch 7/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.5635 - accuracy: 0.7582 - val_loss: 0.5669 - val_accuracy: 0.7526\nEpoch 8/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.5342 - accuracy: 0.7687 - val_loss: 0.5109 - val_accuracy: 0.7795\nEpoch 9/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.5278 - accuracy: 0.7753 - val_loss: 0.4961 - val_accuracy: 0.7882\nEpoch 10/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.5038 - accuracy: 0.7849 - val_loss: 0.4873 - val_accuracy: 0.7864\nEpoch 11/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4857 - accuracy: 0.7897 - val_loss: 0.4914 - val_accuracy: 0.7907\nEpoch 12/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4762 - accuracy: 0.7972 - val_loss: 0.4586 - val_accuracy: 0.8061\nEpoch 13/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4682 - accuracy: 0.7993 - val_loss: 0.4494 - val_accuracy: 0.8093\nEpoch 14/50\n2010/2010 [==============================] - 69s 35ms/step - loss: 0.4526 - accuracy: 0.8085 - val_loss: 0.4471 - val_accuracy: 0.8103\nEpoch 15/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4373 - accuracy: 0.8157 - val_loss: 0.4410 - val_accuracy: 0.8147\nEpoch 16/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4424 - accuracy: 0.8130 - val_loss: 0.4291 - val_accuracy: 0.8192\nEpoch 17/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4280 - accuracy: 0.8202 - val_loss: 0.4143 - val_accuracy: 0.8266\nEpoch 18/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4135 - accuracy: 0.8256 - val_loss: 0.4090 - val_accuracy: 0.8291\nEpoch 19/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4122 - accuracy: 0.8284 - val_loss: 0.4418 - val_accuracy: 0.8146\nEpoch 20/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4004 - accuracy: 0.8351 - val_loss: 0.4156 - val_accuracy: 0.8287\nEpoch 21/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.4052 - accuracy: 0.8315 - val_loss: 0.4141 - val_accuracy: 0.8230\nEpoch 22/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3974 - accuracy: 0.8329 - val_loss: 0.4012 - val_accuracy: 0.8303\nEpoch 23/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3846 - accuracy: 0.8404 - val_loss: 0.3917 - val_accuracy: 0.8396\nEpoch 24/50\n2010/2010 [==============================] - 69s 35ms/step - loss: 0.3826 - accuracy: 0.8387 - val_loss: 0.3786 - val_accuracy: 0.8424\nEpoch 25/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3818 - accuracy: 0.8442 - val_loss: 0.4114 - val_accuracy: 0.8343\nEpoch 26/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3759 - accuracy: 0.8447 - val_loss: 0.3923 - val_accuracy: 0.8415\nEpoch 27/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3647 - accuracy: 0.8513 - val_loss: 0.3647 - val_accuracy: 0.8503\nEpoch 28/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3660 - accuracy: 0.8514 - val_loss: 0.3669 - val_accuracy: 0.8497\nEpoch 29/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3679 - accuracy: 0.8491 - val_loss: 0.4546 - val_accuracy: 0.8173\nEpoch 30/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3585 - accuracy: 0.8520 - val_loss: 0.3663 - val_accuracy: 0.8537\nEpoch 31/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3578 - accuracy: 0.8546 - val_loss: 0.3515 - val_accuracy: 0.8589\nEpoch 32/50\n2010/2010 [==============================] - 69s 35ms/step - loss: 0.3536 - accuracy: 0.8578 - val_loss: 0.3457 - val_accuracy: 0.8617\nEpoch 34/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3457 - accuracy: 0.8625 - val_loss: 0.3513 - val_accuracy: 0.8612\nEpoch 35/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3424 - accuracy: 0.8621 - val_loss: 0.3465 - val_accuracy: 0.8616\nEpoch 36/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3366 - accuracy: 0.8652 - val_loss: 0.3496 - val_accuracy: 0.8611\nEpoch 37/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3340 - accuracy: 0.8677 - val_loss: 0.3391 - val_accuracy: 0.8610\nEpoch 38/50\n2010/2010 [==============================] - 68s 34ms/step - loss: 0.3225 - accuracy: 0.8711 - val_loss: 0.3404 - val_accuracy: 0.8638\nEpoch 39/50\n2010/2010 [==============================] - 68s 34ms/step - loss: 0.3287 - accuracy: 0.8696 - val_loss: 0.3299 - val_accuracy: 0.8664\nEpoch 40/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3209 - accuracy: 0.8720 - val_loss: 0.3276 - val_accuracy: 0.8696\nEpoch 41/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3225 - accuracy: 0.8738 - val_loss: 0.3107 - val_accuracy: 0.8750\nEpoch 42/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3241 - accuracy: 0.8717 - val_loss: 0.3452 - val_accuracy: 0.8612\nEpoch 43/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3176 - accuracy: 0.8751 - val_loss: 0.3208 - val_accuracy: 0.8718\nEpoch 44/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3154 - accuracy: 0.8771 - val_loss: 0.3269 - val_accuracy: 0.8736\nEpoch 45/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3003 - accuracy: 0.8816 - val_loss: 0.3530 - val_accuracy: 0.8668\nEpoch 46/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3067 - accuracy: 0.8808 - val_loss: 0.3158 - val_accuracy: 0.8765\nEpoch 47/50\n2010/2010 [==============================] - 68s 34ms/step - loss: 0.3054 - accuracy: 0.8801 - val_loss: 0.3255 - val_accuracy: 0.8705\nEpoch 48/50\n2010/2010 [==============================] - 68s 34ms/step - loss: 0.3001 - accuracy: 0.8827 - val_loss: 0.3228 - val_accuracy: 0.8724\nEpoch 49/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.2991 - accuracy: 0.8864 - val_loss: 0.3455 - val_accuracy: 0.8645\nEpoch 50/50\n2010/2010 [==============================] - 69s 34ms/step - loss: 0.3019 - accuracy: 0.8823 - val_loss: 0.3021 - val_accuracy: 0.8809\n","output_type":"stream"},{"execution_count":53,"output_type":"execute_result","data":{"text/plain":""},"metadata":{}}]},{"cell_type":"markdown","source":"### **Predictions**","metadata":{}},{"cell_type":"code","source":"#predicting outputs for test dataset\n\ndatagen.fit(X_test)\npredictions= model.predict(X_test)\npredictions[:5]\n","metadata":{"trusted":true},"execution_count":54,"outputs":[{"execution_count":54,"output_type":"execute_result","data":{"text/plain":"array([[1.2441468e-13, 5.3811799e-11, 9.5440066e-07, 4.0529411e-08,\n 4.4220947e-06, 9.9999464e-01],\n [1.8547224e-13, 6.2210410e-11, 1.1664010e-06, 2.5988212e-08,\n 2.0647996e-05, 9.9997818e-01],\n [1.8294052e-13, 8.4191298e-10, 7.5464533e-07, 6.3542807e-06,\n 8.8500065e-06, 9.9998403e-01],\n [1.4470559e-13, 6.4180772e-10, 9.2504746e-07, 2.3590935e-06,\n 1.1521787e-05, 9.9998510e-01],\n [7.8577166e-14, 1.1962767e-10, 7.4712875e-07, 1.8806071e-07,\n 7.9157680e-06, 9.9999118e-01]], dtype=float32)"},"metadata":{}}]},{"cell_type":"code","source":"y_pred=[]\nfor i in range(len(predictions)):\n y_pred.append(np.argmax(predictions[i]))\n \ny_test2=[]\nfor i in range(len(y_test)):\n y_test2.append(np.argmax(y_test.iloc[i,:]))\n ","metadata":{"trusted":true},"execution_count":55,"outputs":[]},{"cell_type":"code","source":"labels=np.array(['Color','Cut','No Defect','Hole','Metal_Contamination','Thread'])\n\n# # 0='Color'\n# # 1='Cut'\n# # 2='No Defect'\n# # 3='Hole'\n# # 4='Metal_Contamination'\n# # 5='Thread'\n\n# #rows=>true\n# #column=>predicted\n\n\nconfusion_matrix(y_test2, y_pred, labels=[0,1,2,3,4,5])\n\n#diagonal values representing the correct predicitions","metadata":{"trusted":true},"execution_count":59,"outputs":[]},{"cell_type":"markdown","source":"### **Sample Testing**","metadata":{}},{"cell_type":"code","source":"i=1000\n\nfig = plt.figure()\nax = fig.add_subplot(111)\nax.set_title(\"y_pred = \"+str(labels[y_pred[i]])+\"\\n\"+\"y_true = \"+str(labels[y_test2[i]]))\nplt.imshow(X_test[i])\n\nif(y_pred[i]!=y_test2[i]):\n print(\"WRONG PREDICTION\")\nelse:\n print(\"PREDICTED ACCURATELY\")\n","metadata":{"trusted":true},"execution_count":61,"outputs":[{"name":"stdout","text":"PREDICTED ACCURATELY\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"
","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}