{
  "id": 170107,
  "title": "Dogs vs cats - help needed to increase accuracy",
  "url": "/competitions/dogs-vs-cats-redux-kernels-edition/discussion/170107",
  "author_name": "",
  "post_date": "2020-07-26T13:03:55.795108Z",
  "votes": null,
  "comment_count": 2,
  "views": 0,
  "content": "<p>hi i am a student of class 10 passionate about ML. I have made  my model for the kaggle dataset of dogs vs cats but cannot achieve good accuracy. Below is my code, please suggest useful changes</p>\n\n<p>import os, cv2, re, random\nimport numpy as np\nimport pandas as pd\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.preprocessing.image import img_to_array, load_img\nfrom keras import layers, models, optimizers\nfrom keras import backend as K\nfrom sklearn.model_selection import train_test_split</p>\n\n<p>TRAIN_DIR = r'C:/Users/Prashant/Desktop/train/train/'\nTEST_DIR = r'C:/Users/Prashant/Desktop/test1/test1/'</p>\n\n<p>ROWS = 150\nCOLS = 150\nCHANNELS = 3\nNO_EPOCHS=10</p>\n\n<p>train_images_dogs_cats = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)]</p>\n\n<p>train_dogs =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i]\ntrain_cats =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i]</p>\n\n<p>test_images_dogs_cats = [TEST_DIR+i for i in os.listdir(TEST_DIR)]</p>\n\n<p>original_train_images = train_dogs[:12000] + train_cats[:12000]\nrandom.shuffle(original_train_images)</p>\n\n<p>train_images = original_train_images[:18000]\nval_images = original_train_images[18000:]</p>\n\n<p>def prepare_data(images):\n    count = len(images)\n    X = np.ndarray((count, ROWS, COLS, CHANNELS), dtype=np.float32)\n    Y = np.zeros((count,), dtype=np.float32)</p>\n\n<pre><code>for i, image_file in enumerate(images):\n    img = load_img(image_file, target_size=(ROWS, COLS))\n    X[i] = img_to_array(img)\n    if 'dog' in image_file:\n        Y[i] = 1.\n    else:\n        Y[i]= 0\n    if i%1000 == 0: print('Processed {} of {}'.format(i, count))\n\nreturn X, Y\n</code></pre>\n\n<p>X_train, Y_train = prepare_data(train_images)</p>\n\n<p>X_val, Y_val = prepare_data(val_images)</p>\n\n<p>train_datagen = ImageDataGenerator(\n    rescale=1./255,\n    rotation_range=40,\n    width_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,)</p>\n\n<p>test_datagen = ImageDataGenerator(rescale=1./255)</p>\n\n<p>train_generator = train_datagen.flow(\n    X_train,\n    Y_train,\n    batch_size=128)</p>\n\n<p>test_generator = test_datagen.flow(\n    X_val,\n    Y_val,\n    batch_size=128)</p>\n\n<p>from tensorflow.python.keras.models import Sequential\nfrom tensorflow.python.keras.layers import Dense,Dropout,Flatten, Conv2D, MaxPool2D\nfrom keras.callbacks import EarlyStopping\nfrom keras.optimizers import Adam</p>\n\n<p>img_width, img_height = 150, 150</p>\n\n<p>model = Sequential()\nmodel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(ROWS, COLS, CHANNELS)))\nmodel.add(MaxPool2D(pool_size=(2, 2)))\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Conv2D(128, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.5))</p>\n\n<p>model.add(Flatten())\nmodel.add(Dense(512, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(2, activation='softmax'))</p>\n\n<p>model.compile(loss='binary_crossentropy',\n             optimizer=Adam(lr = 0.001), \n             metrics=['accuracy'])</p>\n\n<p>train_steps = len(train_images)/128\nvalidation_steps = len(val_images)/128</p>\n\n<p>model.fit_generator(\n    train_generator,\n    steps_per_epoch=train_steps,\n    epochs=10,\n    validation_data=test_generator,\n    validation_steps=validation_steps,\n    callbacks=EarlyStopping(monitor='val_loss', mode='min',patience=2,verbose=1))</p>\n\n<p>evaluation_images = train_dogs[12000:12500] + train_cats[12000:12500]\nrandom.shuffle(evaluation_images)</p>\n\n<p>X_evaluation, y_evaluation = prep_data(evaluation_images)\nX_evaluation /= 255</p>\n\n<p>evaluation = model.evaluate(X_evaluation, y_evaluation)</p>\n\n<p>import keras\nmodel.save('dogcat.model')</p>\n\n<p>X_test, _ = prepare_data(test_images_dogs_cats)\nX_test /= 255.</p>\n\n<p>results = model.predict(X_test)\nresults = np.argmax(results,axis = 1)</p>\n\n<p>results = pd.Series(results,name=\"Label\")</p>\n\n<p>submission = pd.concat([pd.Series(range(1,12501),name = \"id\"),results],axis = 1)</p>\n\n<p>submission.to_csv(\"dogs-v-cats.csv\",index=False)\nsubmission</p>",
  "messages": [
    {
      "id": "946239",
      "postDate": "07/26/2020 13:03:55",
      "content": "<p>hi i am a student of class 10 passionate about ML. I have made  my model for the kaggle dataset of dogs vs cats but cannot achieve good accuracy. Below is my code, please suggest useful changes</p>\n\n<p>import os, cv2, re, random\nimport numpy as np\nimport pandas as pd\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.preprocessing.image import img_to_array, load_img\nfrom keras import layers, models, optimizers\nfrom keras import backend as K\nfrom sklearn.model_selection import train_test_split</p>\n\n<p>TRAIN_DIR = r'C:/Users/Prashant/Desktop/train/train/'\nTEST_DIR = r'C:/Users/Prashant/Desktop/test1/test1/'</p>\n\n<p>ROWS = 150\nCOLS = 150\nCHANNELS = 3\nNO_EPOCHS=10</p>\n\n<p>train_images_dogs_cats = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)]</p>\n\n<p>train_dogs =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i]\ntrain_cats =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i]</p>\n\n<p>test_images_dogs_cats = [TEST_DIR+i for i in os.listdir(TEST_DIR)]</p>\n\n<p>original_train_images = train_dogs[:12000] + train_cats[:12000]\nrandom.shuffle(original_train_images)</p>\n\n<p>train_images = original_train_images[:18000]\nval_images = original_train_images[18000:]</p>\n\n<p>def prepare_data(images):\n    count = len(images)\n    X = np.ndarray((count, ROWS, COLS, CHANNELS), dtype=np.float32)\n    Y = np.zeros((count,), dtype=np.float32)</p>\n\n<pre><code>for i, image_file in enumerate(images):\n    img = load_img(image_file, target_size=(ROWS, COLS))\n    X[i] = img_to_array(img)\n    if 'dog' in image_file:\n        Y[i] = 1.\n    else:\n        Y[i]= 0\n    if i%1000 == 0: print('Processed {} of {}'.format(i, count))\n\nreturn X, Y\n</code></pre>\n\n<p>X_train, Y_train = prepare_data(train_images)</p>\n\n<p>X_val, Y_val = prepare_data(val_images)</p>\n\n<p>train_datagen = ImageDataGenerator(\n    rescale=1./255,\n    rotation_range=40,\n    width_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,)</p>\n\n<p>test_datagen = ImageDataGenerator(rescale=1./255)</p>\n\n<p>train_generator = train_datagen.flow(\n    X_train,\n    Y_train,\n    batch_size=128)</p>\n\n<p>test_generator = test_datagen.flow(\n    X_val,\n    Y_val,\n    batch_size=128)</p>\n\n<p>from tensorflow.python.keras.models import Sequential\nfrom tensorflow.python.keras.layers import Dense,Dropout,Flatten, Conv2D, MaxPool2D\nfrom keras.callbacks import EarlyStopping\nfrom keras.optimizers import Adam</p>\n\n<p>img_width, img_height = 150, 150</p>\n\n<p>model = Sequential()\nmodel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(ROWS, COLS, CHANNELS)))\nmodel.add(MaxPool2D(pool_size=(2, 2)))\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Conv2D(128, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.5))</p>\n\n<p>model.add(Flatten())\nmodel.add(Dense(512, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(2, activation='softmax'))</p>\n\n<p>model.compile(loss='binary_crossentropy',\n             optimizer=Adam(lr = 0.001), \n             metrics=['accuracy'])</p>\n\n<p>train_steps = len(train_images)/128\nvalidation_steps = len(val_images)/128</p>\n\n<p>model.fit_generator(\n    train_generator,\n    steps_per_epoch=train_steps,\n    epochs=10,\n    validation_data=test_generator,\n    validation_steps=validation_steps,\n    callbacks=EarlyStopping(monitor='val_loss', mode='min',patience=2,verbose=1))</p>\n\n<p>evaluation_images = train_dogs[12000:12500] + train_cats[12000:12500]\nrandom.shuffle(evaluation_images)</p>\n\n<p>X_evaluation, y_evaluation = prep_data(evaluation_images)\nX_evaluation /= 255</p>\n\n<p>evaluation = model.evaluate(X_evaluation, y_evaluation)</p>\n\n<p>import keras\nmodel.save('dogcat.model')</p>\n\n<p>X_test, _ = prepare_data(test_images_dogs_cats)\nX_test /= 255.</p>\n\n<p>results = model.predict(X_test)\nresults = np.argmax(results,axis = 1)</p>\n\n<p>results = pd.Series(results,name=\"Label\")</p>\n\n<p>submission = pd.concat([pd.Series(range(1,12501),name = \"id\"),results],axis = 1)</p>\n\n<p>submission.to_csv(\"dogs-v-cats.csv\",index=False)\nsubmission</p>",
      "rawMarkdown": "hi i am a student of class 10 passionate about ML. I have made  my model for the kaggle dataset of dogs vs cats but cannot achieve good accuracy. Below is my code, please suggest useful changes\n\nimport os, cv2, re, random\nimport numpy as np\nimport pandas as pd\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.preprocessing.image import img_to_array, load_img\nfrom keras import layers, models, optimizers\nfrom keras import backend as K\nfrom sklearn.model_selection import train_test_split\n\nTRAIN_DIR = r'C:/Users/Prashant/Desktop/train/train/'\nTEST_DIR = r'C:/Users/Prashant/Desktop/test1/test1/'\n\nROWS = 150\nCOLS = 150\nCHANNELS = 3\nNO_EPOCHS=10\n\ntrain_images_dogs_cats = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)]\n\ntrain_dogs =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i]\ntrain_cats =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i]\n\ntest_images_dogs_cats = [TEST_DIR+i for i in os.listdir(TEST_DIR)]\n\noriginal_train_images = train_dogs[:12000] + train_cats[:12000]\nrandom.shuffle(original_train_images)\n\ntrain_images = original_train_images[:18000]\nval_images = original_train_images[18000:]\n\ndef prepare_data(images):\n    count = len(images)\n    X = np.ndarray((count, ROWS, COLS, CHANNELS), dtype=np.float32)\n    Y = np.zeros((count,), dtype=np.float32)\n    \n    for i, image_file in enumerate(images):\n        img = load_img(image_file, target_size=(ROWS, COLS))\n        X[i] = img_to_array(img)\n        if 'dog' in image_file:\n            Y[i] = 1.\n        else:\n            Y[i]= 0\n        if i%1000 == 0: print('Processed {} of {}'.format(i, count))\n    \n    return X, Y\n\nX_train, Y_train = prepare_data(train_images)\n\nX_val, Y_val = prepare_data(val_images)\n\ntrain_datagen = ImageDataGenerator(\n    rescale=1./255,\n    rotation_range=40,\n    width_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,)\n\ntest_datagen = ImageDataGenerator(rescale=1./255)\n\ntrain_generator = train_datagen.flow(\n    X_train,\n    Y_train,\n    batch_size=128)\n\ntest_generator = test_datagen.flow(\n    X_val,\n    Y_val,\n    batch_size=128)\n\nfrom tensorflow.python.keras.models import Sequential\nfrom tensorflow.python.keras.layers import Dense,Dropout,Flatten, Conv2D, MaxPool2D\nfrom keras.callbacks import EarlyStopping\nfrom keras.optimizers import Adam\n\nimg_width, img_height = 150, 150\n\nmodel = Sequential()\nmodel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(ROWS, COLS, CHANNELS)))\nmodel.add(MaxPool2D(pool_size=(2, 2)))\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Conv2D(128, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\nmodel.add(Dense(512, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(2, activation='softmax'))\n\nmodel.compile(loss='binary_crossentropy',\n             optimizer=Adam(lr = 0.001), \n             metrics=['accuracy'])\n\ntrain_steps = len(train_images)/128\nvalidation_steps = len(val_images)/128\n\nmodel.fit_generator(\n    train_generator,\n    steps_per_epoch=train_steps,\n    epochs=10,\n    validation_data=test_generator,\n    validation_steps=validation_steps,\n    callbacks=EarlyStopping(monitor='val_loss', mode='min',patience=2,verbose=1))\n\nevaluation_images = train_dogs[12000:12500] + train_cats[12000:12500]\nrandom.shuffle(evaluation_images)\n\nX_evaluation, y_evaluation = prep_data(evaluation_images)\nX_evaluation /= 255\n\nevaluation = model.evaluate(X_evaluation, y_evaluation)\n\nimport keras\nmodel.save('dogcat.model')\n\nX_test, _ = prepare_data(test_images_dogs_cats)\nX_test /= 255.\n\nresults = model.predict(X_test)\nresults = np.argmax(results,axis = 1)\n\nresults = pd.Series(results,name=\"Label\")\n\nsubmission = pd.concat([pd.Series(range(1,12501),name = \"id\"),results],axis = 1)\n\nsubmission.to_csv(\"dogs-v-cats.csv\",index=False)\nsubmission",
      "votes": null
    },
    {
      "id": "1324599",
      "postDate": "05/27/2021 04:59:11",
      "content": "<p>Increase more layers with regularisation.Try different learning rate eg., 3e-4 and use weight decay. You can also use the powerfull pre-trained model architecture for features extraction. E.g., VGG,RESNET,MOBILENET (Transfer Learning)</p>",
      "rawMarkdown": "Increase more layers with regularisation.Try different learning rate eg., 3e-4 and use weight decay. You can also use the powerfull pre-trained model architecture for features extraction. E.g., VGG,RESNET,MOBILENET (Transfer Learning)",
      "votes": null
    },
    {
      "id": "1683911",
      "postDate": "02/10/2022 06:16:52",
      "content": "<p>Hi <br>\nrefer to my notebook it is very simple and validation accuracy of above 97%. I have used transfer learning. it is a great way to increase accuracy on image classification. In addition, this notebook uses the ImageGenerator API which is out of the box method to label and batch images.If you have any question let me know. I am always ready for help.<br>\ncheers!</p>\n<p><a href=\"https://www.kaggle.com/shaukathussain/cat-vs-dog-with-transfer-learning\" target=\"_blank\">https://www.kaggle.com/shaukathussain/cat-vs-dog-with-transfer-learning</a></p>",
      "rawMarkdown": "Hi \nrefer to my notebook it is very simple and validation accuracy of above 97%. I have used transfer learning. it is a great way to increase accuracy on image classification. In addition, this notebook uses the ImageGenerator API which is out of the box method to label and batch images.If you have any question let me know. I am always ready for help.\ncheers!\n\nhttps://www.kaggle.com/shaukathussain/cat-vs-dog-with-transfer-learning",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1324599,
      "author_name": "sivasankar169",
      "author_url": "",
      "post_date": "05/27/2021 04:59:11",
      "content": "<p>Increase more layers with regularisation.Try different learning rate eg., 3e-4 and use weight decay. You can also use the powerfull pre-trained model architecture for features extraction. E.g., VGG,RESNET,MOBILENET (Transfer Learning)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1683911,
      "author_name": "shaukathussain",
      "author_url": "",
      "post_date": "02/10/2022 06:16:52",
      "content": "<p>Hi <br>\nrefer to my notebook it is very simple and validation accuracy of above 97%. I have used transfer learning. it is a great way to increase accuracy on image classification. In addition, this notebook uses the ImageGenerator API which is out of the box method to label and batch images.If you have any question let me know. I am always ready for help.<br>\ncheers!</p>\n<p><a href=\"https://www.kaggle.com/shaukathussain/cat-vs-dog-with-transfer-learning\" target=\"_blank\">https://www.kaggle.com/shaukathussain/cat-vs-dog-with-transfer-learning</a></p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "946239": "hi i am a student of class 10 passionate about ML. I have made  my model for the kaggle dataset of dogs vs cats but cannot achieve good accuracy. Below is my code, please suggest useful changes\n\nimport os, cv2, re, random\nimport numpy as np\nimport pandas as pd\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.preprocessing.image import img_to_array, load_img\nfrom keras import layers, models, optimizers\nfrom keras import backend as K\nfrom sklearn.model_selection import train_test_split\n\nTRAIN_DIR = r'C:/Users/Prashant/Desktop/train/train/'\nTEST_DIR = r'C:/Users/Prashant/Desktop/test1/test1/'\n\nROWS = 150\nCOLS = 150\nCHANNELS = 3\nNO_EPOCHS=10\n\ntrain_images_dogs_cats = [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR)]\n\ntrain_dogs =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'dog' in i]\ntrain_cats =   [TRAIN_DIR+i for i in os.listdir(TRAIN_DIR) if 'cat' in i]\n\ntest_images_dogs_cats = [TEST_DIR+i for i in os.listdir(TEST_DIR)]\n\noriginal_train_images = train_dogs[:12000] + train_cats[:12000]\nrandom.shuffle(original_train_images)\n\ntrain_images = original_train_images[:18000]\nval_images = original_train_images[18000:]\n\ndef prepare_data(images):\n    count = len(images)\n    X = np.ndarray((count, ROWS, COLS, CHANNELS), dtype=np.float32)\n    Y = np.zeros((count,), dtype=np.float32)\n    \n    for i, image_file in enumerate(images):\n        img = load_img(image_file, target_size=(ROWS, COLS))\n        X[i] = img_to_array(img)\n        if 'dog' in image_file:\n            Y[i] = 1.\n        else:\n            Y[i]= 0\n        if i%1000 == 0: print('Processed {} of {}'.format(i, count))\n    \n    return X, Y\n\nX_train, Y_train = prepare_data(train_images)\n\nX_val, Y_val = prepare_data(val_images)\n\ntrain_datagen = ImageDataGenerator(\n    rescale=1./255,\n    rotation_range=40,\n    width_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,)\n\ntest_datagen = ImageDataGenerator(rescale=1./255)\n\ntrain_generator = train_datagen.flow(\n    X_train,\n    Y_train,\n    batch_size=128)\n\ntest_generator = test_datagen.flow(\n    X_val,\n    Y_val,\n    batch_size=128)\n\nfrom tensorflow.python.keras.models import Sequential\nfrom tensorflow.python.keras.layers import Dense,Dropout,Flatten, Conv2D, MaxPool2D\nfrom keras.callbacks import EarlyStopping\nfrom keras.optimizers import Adam\n\nimg_width, img_height = 150, 150\n\nmodel = Sequential()\nmodel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(ROWS, COLS, CHANNELS)))\nmodel.add(MaxPool2D(pool_size=(2, 2)))\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Conv2D(128, (3, 3), activation='relu'))\nmodel.add(MaxPool2D(pool_size=(2,2)))\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\nmodel.add(Dense(512, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(2, activation='softmax'))\n\nmodel.compile(loss='binary_crossentropy',\n             optimizer=Adam(lr = 0.001), \n             metrics=['accuracy'])\n\ntrain_steps = len(train_images)/128\nvalidation_steps = len(val_images)/128\n\nmodel.fit_generator(\n    train_generator,\n    steps_per_epoch=train_steps,\n    epochs=10,\n    validation_data=test_generator,\n    validation_steps=validation_steps,\n    callbacks=EarlyStopping(monitor='val_loss', mode='min',patience=2,verbose=1))\n\nevaluation_images = train_dogs[12000:12500] + train_cats[12000:12500]\nrandom.shuffle(evaluation_images)\n\nX_evaluation, y_evaluation = prep_data(evaluation_images)\nX_evaluation /= 255\n\nevaluation = model.evaluate(X_evaluation, y_evaluation)\n\nimport keras\nmodel.save('dogcat.model')\n\nX_test, _ = prepare_data(test_images_dogs_cats)\nX_test /= 255.\n\nresults = model.predict(X_test)\nresults = np.argmax(results,axis = 1)\n\nresults = pd.Series(results,name=\"Label\")\n\nsubmission = pd.concat([pd.Series(range(1,12501),name = \"id\"),results],axis = 1)\n\nsubmission.to_csv(\"dogs-v-cats.csv\",index=False)\nsubmission",
    "1324599": "Increase more layers with regularisation.Try different learning rate eg., 3e-4 and use weight decay. You can also use the powerfull pre-trained model architecture for features extraction. E.g., VGG,RESNET,MOBILENET (Transfer Learning)",
    "1683911": "Hi \nrefer to my notebook it is very simple and validation accuracy of above 97%. I have used transfer learning. it is a great way to increase accuracy on image classification. In addition, this notebook uses the ImageGenerator API which is out of the box method to label and batch images.If you have any question let me know. I am always ready for help.\ncheers!\n\nhttps://www.kaggle.com/shaukathussain/cat-vs-dog-with-transfer-learning"
  },
  "source": "meta"
}