{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":658267,"sourceType":"datasetVersion","datasetId":277323},{"sourceId":7520788,"sourceType":"datasetVersion","datasetId":4381094}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install --upgrade tensorflow\nimport os\nimport librosa\nimport pickle\nimport numpy as np\nimport pandas as pd\nimport seaborn\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nfrom keras.layers import Conv2D, MaxPool2D, Flatten, Dense, Dropout,LSTM,Concatenate,Activation,Input\nfrom keras.optimizers import Adam, RMSprop\nfrom keras.models import Model\nfrom keras.models import Sequential\nimport cv2\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.layers import Dense, GlobalAveragePooling2D, BatchNormalization, Dropout\nfrom tensorflow.keras.applications import MobileNetV2, DenseNet169, InceptionV3\nfrom tensorflow.keras.models import Model, save_model, load_model\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import Adam\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nimport tensorflow as tf\nimport tensorflow.keras\nfrom tensorflow.keras.layers import Dense, Activation, Dropout, Flatten\nfrom tensorflow.keras.layers import Conv2D\nfrom tensorflow.keras.layers import MaxPooling2D\nfrom sklearn.metrics import accuracy_score,classification_report\nimport seaborn as sns","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-01-31T11:33:12.124642Z","iopub.execute_input":"2024-01-31T11:33:12.125485Z","iopub.status.idle":"2024-01-31T11:33:24.932136Z","shell.execute_reply.started":"2024-01-31T11:33:12.125446Z","shell.execute_reply":"2024-01-31T11:33:24.931131Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_dir = '/kaggle/input/plantvillage-dataset/color'\nkeyword=[\"Corn\",\"Potato\",\"Soybean\", \"Strawberry\",\"Tomato\"]\nclass_folders = os.listdir(data_dir)\nimage_paths = []\nlabels = []\n\nfor class_folder in class_folders:\n    for key in keyword:\n        if key in class_folder:\n            class_path = os.path.join(data_dir, class_folder)\n            image_files = os.listdir(class_path)\n            for image_file in image_files:\n                image_path = os.path.join(class_path, image_file)\n                image_paths.append(image_path)\n                labels.append(class_folder)\n\ndf = pd.DataFrame({'image_path': image_paths, 'label': labels})","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:33:24.934506Z","iopub.execute_input":"2024-01-31T11:33:24.934985Z","iopub.status.idle":"2024-01-31T11:33:25.047717Z","shell.execute_reply.started":"2024-01-31T11:33:24.934941Z","shell.execute_reply":"2024-01-31T11:33:25.046876Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.head()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:33:25.048761Z","iopub.execute_input":"2024-01-31T11:33:25.049039Z","iopub.status.idle":"2024-01-31T11:33:25.059647Z","shell.execute_reply.started":"2024-01-31T11:33:25.049015Z","shell.execute_reply":"2024-01-31T11:33:25.058687Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"The classes:\\n\", np.unique(df['label']))","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:33:30.402046Z","iopub.execute_input":"2024-01-31T11:33:30.402444Z","iopub.status.idle":"2024-01-31T11:33:30.431177Z","shell.execute_reply.started":"2024-01-31T11:33:30.402412Z","shell.execute_reply":"2024-01-31T11:33:30.430325Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_counts = df['label'].value_counts()\n\nplt.figure(figsize=(14, 8))\nx = seaborn.barplot(x=class_counts.values, y=class_counts.index, orient='h')\nplt.title('Class')\nplt.xlabel('Number of Images')\nplt.ylabel('Plant Types')\nplt.tight_layout()\n\nfor i, v in enumerate(class_counts.values):\n    x.text(v + 5, i, str(v), color='black', va='center')\n\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:33:39.597738Z","iopub.execute_input":"2024-01-31T11:33:39.598109Z","iopub.status.idle":"2024-01-31T11:33:40.126240Z","shell.execute_reply.started":"2024-01-31T11:33:39.598081Z","shell.execute_reply":"2024-01-31T11:33:40.125280Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"num_classes = len(df['label'].unique())\n\nnum_images_per_row = 4\nnum_rows = (num_classes + num_images_per_row - 1) // num_images_per_row\n\nplt.figure(figsize=(15, 5 * num_rows))\n\nfor i, plant_class in enumerate(df['label'].unique()):\n    plt.subplot(num_rows, num_images_per_row, i + 1)\n    path = os.path.join(data_dir, df[df['label'] == plant_class]['image_path'].iloc[0])\n\n    if os.path.exists(path):\n        sample_image = cv2.imread(path)\n        if sample_image is not None:\n            plt.imshow(cv2.cvtColor(sample_image, cv2.COLOR_BGR2RGB))\n            plt.title(plant_class)\n            plt.axis('off')\n        else:\n            print(f\"Error: Unable to load image from path: {path}\")\n    else:\n        print(f\"Error: Image path does not exist: {path}\")\n\nplt.tight_layout()\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:33:46.256687Z","iopub.execute_input":"2024-01-31T11:33:46.257079Z","iopub.status.idle":"2024-01-31T11:33:49.938113Z","shell.execute_reply.started":"2024-01-31T11:33:46.257049Z","shell.execute_reply":"2024-01-31T11:33:49.936473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = df[df['label'].isin(['Corn_(maize)___Common_rust_','Corn_(maize)___healthy','Corn_(maize)___Northern_Leaf_Blight','Corn_(maize)___Cercospora_leaf_spot Gray_leaf_spot'])]","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:34:20.246724Z","iopub.execute_input":"2024-01-31T11:34:20.247661Z","iopub.status.idle":"2024-01-31T11:34:20.255830Z","shell.execute_reply.started":"2024-01-31T11:34:20.247627Z","shell.execute_reply":"2024-01-31T11:34:20.254811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['label'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:34:23.237409Z","iopub.execute_input":"2024-01-31T11:34:23.238109Z","iopub.status.idle":"2024-01-31T11:34:23.246176Z","shell.execute_reply.started":"2024-01-31T11:34:23.238080Z","shell.execute_reply":"2024-01-31T11:34:23.245076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['label'] = ['healthy' if x == 'Corn_(maize)___healthy' else 'diseased' for x in df['label']]","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:34:28.512953Z","iopub.execute_input":"2024-01-31T11:34:28.513654Z","iopub.status.idle":"2024-01-31T11:34:28.519492Z","shell.execute_reply.started":"2024-01-31T11:34:28.513621Z","shell.execute_reply":"2024-01-31T11:34:28.518562Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df['label'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:34:32.093068Z","iopub.execute_input":"2024-01-31T11:34:32.093476Z","iopub.status.idle":"2024-01-31T11:34:32.102055Z","shell.execute_reply.started":"2024-01-31T11:34:32.093446Z","shell.execute_reply":"2024-01-31T11:34:32.101139Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.bar(np.unique(df['label'].values),df['label'].value_counts())\nplt.ylabel('Count')\nplt.xlabel('class')\nplt.title('Count of instruments vs Type of Instruments')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:34:36.232353Z","iopub.execute_input":"2024-01-31T11:34:36.233053Z","iopub.status.idle":"2024-01-31T11:34:36.670490Z","shell.execute_reply.started":"2024-01-31T11:34:36.233022Z","shell.execute_reply":"2024-01-31T11:34:36.669547Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_data = list()\nfor i in tqdm(range(df.shape[0])):\n    image=cv2.imread(df['image_path'].values[i])\n    new_image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)\n    image_data.append(new_image)\nimage_data = np.array(image_data)","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:34:40.494811Z","iopub.execute_input":"2024-01-31T11:34:40.495166Z","iopub.status.idle":"2024-01-31T11:35:04.277254Z","shell.execute_reply.started":"2024-01-31T11:34:40.495139Z","shell.execute_reply":"2024-01-31T11:35:04.276244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_labels=list()\nfor i in tqdm(range(df.shape[0])):\n  image_labels.append(df['label'].values[i])\n\nimage_labels=np.array(image_labels)\n","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:35:12.728573Z","iopub.execute_input":"2024-01-31T11:35:12.728956Z","iopub.status.idle":"2024-01-31T11:35:12.770892Z","shell.execute_reply.started":"2024-01-31T11:35:12.728925Z","shell.execute_reply":"2024-01-31T11:35:12.770045Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_encoder = LabelEncoder()\nlabel_encoded = label_encoder.fit_transform(image_labels)\n\nlabel_encoded = label_encoded[:, np.newaxis]\nlabel_mapping = dict(zip(label_encoder.classes_, range(len(label_encoder.classes_))))\nprint(label_mapping)","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:35:30.455696Z","iopub.execute_input":"2024-01-31T11:35:30.456093Z","iopub.status.idle":"2024-01-31T11:35:30.463236Z","shell.execute_reply.started":"2024-01-31T11:35:30.456064Z","shell.execute_reply":"2024-01-31T11:35:30.462295Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"one_hot_encoder = OneHotEncoder(sparse=False)\none_hot_encoded = one_hot_encoder.fit_transform(label_encoded)","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:35:34.957417Z","iopub.execute_input":"2024-01-31T11:35:34.957789Z","iopub.status.idle":"2024-01-31T11:35:34.969217Z","shell.execute_reply.started":"2024-01-31T11:35:34.957761Z","shell.execute_reply":"2024-01-31T11:35:34.968096Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = image_data\ny = one_hot_encoded","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:37:48.433798Z","iopub.execute_input":"2024-01-31T11:37:48.434146Z","iopub.status.idle":"2024-01-31T11:37:48.438329Z","shell.execute_reply.started":"2024-01-31T11:37:48.434121Z","shell.execute_reply":"2024-01-31T11:37:48.437261Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = (X-X.min())/(X.max()-X.min())","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:37:51.802561Z","iopub.execute_input":"2024-01-31T11:37:51.803291Z","iopub.status.idle":"2024-01-31T11:37:54.068454Z","shell.execute_reply.started":"2024-01-31T11:37:51.803257Z","shell.execute_reply":"2024-01-31T11:37:54.067421Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:37:56.670987Z","iopub.execute_input":"2024-01-31T11:37:56.671602Z","iopub.status.idle":"2024-01-31T11:38:00.843254Z","shell.execute_reply.started":"2024-01-31T11:37:56.671569Z","shell.execute_reply":"2024-01-31T11:38:00.842349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"input_shape = (X_train.shape[1], X_train.shape[2], 3)","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:38:06.562193Z","iopub.execute_input":"2024-01-31T11:38:06.562906Z","iopub.status.idle":"2024-01-31T11:38:06.567054Z","shell.execute_reply.started":"2024-01-31T11:38:06.562876Z","shell.execute_reply":"2024-01-31T11:38:06.566023Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], X_train.shape[2],3)\nprint(X_train.shape)\nX_test = X_test.reshape(X_test.shape[0], X_test.shape[1], X_test.shape[2], 3)\nprint(X_test.shape)\n","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:38:10.849397Z","iopub.execute_input":"2024-01-31T11:38:10.849988Z","iopub.status.idle":"2024-01-31T11:38:10.856115Z","shell.execute_reply.started":"2024-01-31T11:38:10.849957Z","shell.execute_reply":"2024-01-31T11:38:10.855044Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\nfor gpu in tf.config.experimental.list_physical_devices('GPU'):\n    tf.compat.v2.config.experimental.set_memory_growth(gpu, True)\n\nmodel = Sequential()\n\nmodel.add(Conv2D(64, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block1_conv1', input_shape=input_shape))\nmodel.add(Conv2D(64, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block1_conv2'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block1_maxpool'))\n\nmodel.add(Conv2D(128, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block2_conv1'))\nmodel.add(Conv2D(128, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block2_conv2'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block2_maxpool'))\n\nmodel.add(Conv2D(256, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block3_conv1'))\nmodel.add(Conv2D(256, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block3_conv2'))\nmodel.add(Conv2D(256, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block3_conv3'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block3_maxpool'))\n\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block4_conv1'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block4_conv2'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block4_conv3'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block4_maxpool'))\n\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block5_conv1'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block5_conv2'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block5_conv3'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block5_maxpool'))\n\nmodel.add(Flatten())\nmodel.add(Dense(4096, activation='relu'))\nmodel.add(Dense(4096, activation='relu'))\nmodel.add(Dense(2, activation='softmax'))\n\ndef optimizer_init_fn():\n    learning_rate = 1e-4\n    return tf.keras.optimizers.Adam(learning_rate)\n\nmodel.compile(optimizer=optimizer_init_fn(),\n              loss='binary_crossentropy',\n              metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:38:44.203373Z","iopub.execute_input":"2024-01-31T11:38:44.203753Z","iopub.status.idle":"2024-01-31T11:38:44.859557Z","shell.execute_reply.started":"2024-01-31T11:38:44.203725Z","shell.execute_reply":"2024-01-31T11:38:44.858753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:38:49.457797Z","iopub.execute_input":"2024-01-31T11:38:49.458714Z","iopub.status.idle":"2024-01-31T11:38:49.511278Z","shell.execute_reply.started":"2024-01-31T11:38:49.458678Z","shell.execute_reply":"2024-01-31T11:38:49.510412Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"checkpoint_filepath = '/tmp/checkpoint'\n\nmodel_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(\n    filepath=checkpoint_filepath,\n    save_weights_only=True,\n    monitor='val_accuracy',\n    mode='max',\n    save_best_only=True)\n\nhistory=model.fit(X_train,y_train,epochs=30,batch_size=32,\n          callbacks=[model_checkpoint_callback],\n          validation_split=0.3)\n\nmodel.save('my_model_2.h5')\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.load_weights('my_model_2.h5')\n\n","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:40:20.089091Z","iopub.execute_input":"2024-01-31T11:40:20.089973Z","iopub.status.idle":"2024-01-31T11:40:24.215336Z","shell.execute_reply.started":"2024-01-31T11:40:20.089934Z","shell.execute_reply":"2024-01-31T11:40:24.214530Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\npredictions = model.predict(X_test)\npredictions = np.argmax(predictions, axis=1)\ny_test_1 = one_hot_encoder.inverse_transform(y_test)\n     \n","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:41:04.410667Z","iopub.execute_input":"2024-01-31T11:41:04.411058Z","iopub.status.idle":"2024-01-31T11:41:16.092836Z","shell.execute_reply.started":"2024-01-31T11:41:04.411029Z","shell.execute_reply":"2024-01-31T11:41:16.092012Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\nprint('Accuracy of CNN model {}'.format(accuracy_score(y_test_1,predictions)))\n     \n","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:41:27.399445Z","iopub.execute_input":"2024-01-31T11:41:27.400348Z","iopub.status.idle":"2024-01-31T11:41:27.407258Z","shell.execute_reply.started":"2024-01-31T11:41:27.400311Z","shell.execute_reply":"2024-01-31T11:41:27.406117Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cm = confusion_matrix(y_test_1, predictions)\nplt.figure(figsize=(8,8))\nsns.heatmap(cm, annot=True, xticklabels=label_encoder.classes_, yticklabels=label_encoder.classes_, fmt='d', cmap=plt.cm.Blues, cbar=False)\nplt.xlabel('Predicted Label')\nplt.ylabel('True Label')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-01-31T11:42:35.008677Z","iopub.execute_input":"2024-01-31T11:42:35.009411Z","iopub.status.idle":"2024-01-31T11:42:35.120172Z","shell.execute_reply.started":"2024-01-31T11:42:35.009373Z","shell.execute_reply":"2024-01-31T11:42:35.119241Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Test vài ảnh bất kỳ**\nĐầu tiên copy địa chỉ các hình ảnh trong data-test rồi gán vào biến path\nSau đó bấm run","metadata":{}},{"cell_type":"code","source":"!pip install --upgrade tensorflow\nimport os\nimport librosa\nimport pickle\nimport numpy as np\nimport pandas as pd\nimport seaborn\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nfrom keras.layers import Conv2D, MaxPool2D, Flatten, Dense, Dropout,LSTM,Concatenate,Activation,Input\nfrom keras.optimizers import Adam, RMSprop\nfrom keras.models import Model\nfrom keras.models import Sequential\nimport cv2\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nfrom tensorflow.keras.layers import Dense, GlobalAveragePooling2D, BatchNormalization, Dropout\nfrom tensorflow.keras.applications import MobileNetV2, DenseNet169, InceptionV3\nfrom tensorflow.keras.models import Model, save_model, load_model\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import Adam\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nimport tensorflow as tf\nimport tensorflow.keras\nfrom tensorflow.keras.layers import Dense, Activation, Dropout, Flatten\nfrom tensorflow.keras.layers import Conv2D\nfrom tensorflow.keras.layers import MaxPooling2D\nfrom sklearn.metrics import accuracy_score,classification_report\nimport seaborn as sns","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for gpu in tf.config.experimental.list_physical_devices('GPU'):\n    tf.compat.v2.config.experimental.set_memory_growth(gpu, True)\n\nmodel = Sequential()\n\nmodel.add(Conv2D(64, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block1_conv1', input_shape=(256,256,3)))\nmodel.add(Conv2D(64, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block1_conv2'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block1_maxpool'))\n\nmodel.add(Conv2D(128, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block2_conv1'))\nmodel.add(Conv2D(128, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block2_conv2'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block2_maxpool'))\n\nmodel.add(Conv2D(256, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block3_conv1'))\nmodel.add(Conv2D(256, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block3_conv2'))\nmodel.add(Conv2D(256, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block3_conv3'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block3_maxpool'))\n\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block4_conv1'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block4_conv2'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block4_conv3'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block4_maxpool'))\n\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block5_conv1'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block5_conv2'))\nmodel.add(Conv2D(512, (3,3), activation=\"relu\", padding=\"same\", kernel_initializer='he_uniform', name='block5_conv3'))\nmodel.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), name='block5_maxpool'))\n\nmodel.add(Flatten())\nmodel.add(Dense(4096, activation='relu'))\nmodel.add(Dense(4096, activation='relu'))\nmodel.add(Dense(2, activation='softmax'))\n\ndef optimizer_init_fn():\n    learning_rate = 1e-4\n    return tf.keras.optimizers.Adam(learning_rate)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.load_weights('my_model_2.h5')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path= '/kaggle/input/data-test/Hinh11.JPG' #gán địa chỉ hình ảnh cần test vào","metadata":{"execution":{"iopub.status.busy":"2024-01-31T13:18:25.408587Z","iopub.execute_input":"2024-01-31T13:18:25.409090Z","iopub.status.idle":"2024-01-31T13:18:25.413718Z","shell.execute_reply.started":"2024-01-31T13:18:25.409058Z","shell.execute_reply":"2024-01-31T13:18:25.412625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image=cv2.imread(path)\nnew_image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)\nimage_data = np.array(new_image)\nX = image_data\nX = (X-X.min())/(X.max()-X.min())\nX= X.reshape(1, 256, 256 , 3)\npredictions = model.predict(X)\npredictions = np.argmax(predictions, axis=1)\nif predictions==0:\n plt.imshow(new_image)\n plt.title('disedsed')\nelse: \n plt.imshow(new_image)\n plt.title('healthy')\n \n\n","metadata":{"execution":{"iopub.status.busy":"2024-01-31T13:18:30.349615Z","iopub.execute_input":"2024-01-31T13:18:30.350281Z","iopub.status.idle":"2024-01-31T13:18:30.764826Z","shell.execute_reply.started":"2024-01-31T13:18:30.350248Z","shell.execute_reply":"2024-01-31T13:18:30.763974Z"},"trusted":true},"execution_count":null,"outputs":[]}]}