{"cells":[{"metadata":{"trusted":false},"cell_type":"code","source":"import cv2","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"dataset link= 'https://www.kaggle.com/c/dogs-vs-cats'"},{"metadata":{"trusted":false},"cell_type":"code","source":"import numpy as np\nimport os\nfrom random import shuffle\n\nTRAIN_DIR ='C:/Users/DELL/Desktop/python/tensor/cnn/dog_vs_cat/train'\nTEST_DIR ='C:/Users/DELL/Desktop/python/tensor/cnn/dog_vs_cat/test'\nIMG_SIZE=50\nLR=1e-3 #0.001\n\nMODEL_NAME='dogsvscats-{}-{}.model'.format(LR,'2conv-basic')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def label_img(img):\n    word_label=img.split('.')[-3]\n    if word_label=='cat':\n        return [1,0]\n    elif word_label=='dog':\n        return [0,1]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def create_train_data():\n    training_data=[]\n    for img in os.listdir(TRAIN_DIR):\n        label=label_img(img)\n        path=(TRAIN_DIR+'/'+img)\n        img=cv2.resize(cv2.imread(path,cv2.IMREAD_GRAYSCALE),(IMG_SIZE,IMG_SIZE))\n        training_data.append([np.array(img),np.array(label)])\n    shuffle(training_data)\n    np.save('train_data.npy',training_data)\n    return training_data","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def process_test_data():\n    testing_data=[]\n    for img in os.listdir(TEST_DIR):\n        path=(TRAIN_DIR+'/'+img)\n        img_num=img.split('.')[0]\n        img=cv2.resize(cv2.imread(path,cv2.IMREAD_GRAYSCALE),(IMG_SIZE,IMG_SIZE))\n        testing_data.append([np.array(img),img_num])\n    np.save('test_data.npy',testing_data)\n    return testing_data","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"train_data=create_train_data()\n# already train\n#train_data=np.load('train_data.npy')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"len(train_data)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"train_data","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"if os.path.exists('{}.meta'.format(MODEL_NAME)):\n    model.load(MODEL_NAME)\n    print(\"model loaded!\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"X=np.array([i[0] for i in train_data])\n#X = X.reshape(-1, IMG_SIZE, IMG_SIZE, 1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"X=X/255.0\nX=X.reshape(-1, IMG_SIZE, IMG_SIZE, 1)\ny=np.array([i[1] for i in train_data])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"len(X)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"len(y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"X","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"def build_model(hp):  \n  model = keras.Sequential([\n    keras.layers.Conv2D(\n        filters=hp.Int('conv_1_filter', min_value=32, max_value=128, step=16),\n        kernel_size=hp.Choice('conv_1_kernel', values = [3,5]),\n        activation='relu',\n        input_shape=(50,50,1)\n    ),\n    keras.layers.Conv2D(\n        filters=hp.Int('conv_2_filter', min_value=32, max_value=64, step=16),\n        kernel_size=hp.Choice('conv_2_kernel', values = [3,5]),\n        activation='relu'\n    ),\n    keras.layers.Flatten(),\n    keras.layers.Dense(\n        units=hp.Int('dense_1_units', min_value=32, max_value=128, step=16),\n        activation='relu'\n    ),\n    keras.layers.Dense(2, activation='softmax')\n  ])\n  \n  model.compile(optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', values=[1e-2, 1e-3])),\n              loss='categorical_crossentropy',\n              metrics=['accuracy'])\n  \n  return model","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"from tensorflow import keras\nfrom kerastuner import RandomSearch\nfrom kerastuner.engine.hyperparameters import HyperParameters","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"tuner_search=RandomSearch(build_model,\n                          objective='val_accuracy',\n                          max_trials=5,directory='output',project_name=\"Dogvscat\")","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":false},"cell_type":"code","source":"tuner_search.search(X,y,epochs=10, validation_split=0.1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"model=tuner_search.get_best_models(num_models=1)[0]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"model.summary()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":false},"cell_type":"code","source":"model.fit(X,y, epochs=20, validation_split=0.1, initial_epoch=10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"model.save('2convo-catvsdog.model')","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"CATEGORIES = ['Cat', 'Dog']\n\n\ndef image(path):\n    img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)\n    new_arr = cv2.resize(img, (IMG_SIZE, IMG_SIZE))\n    new_arr = np.array(new_arr)\n    new_arr = new_arr.reshape(-1,IMG_SIZE,IMG_SIZE, 1)\n    return new_arr","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"from tensorflow.keras.preprocessing.image import load_img\nimport matplotlib.pyplot as plt\nimage_plt = load_img('test/4.jpg', target_size=(224, 224))\nplt.imshow(image_plt)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred=model.predict([image('test/4.jpg')])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"CATEGORIES[y_pred.argmax()]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"image_plt = load_img('test/2.jpg', target_size=(224, 224))\nplt.imshow(image_plt)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred=model.predict([image('test/2.jpg')])\nCATEGORIES[y_pred.argmax()]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"image_plt = load_img('test/45.jpg', target_size=(224, 224))\nplt.imshow(image_plt)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y_pred=model.predict([image('test/45.jpg')])\nCATEGORIES[y_pred.argmax()]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"tensor","language":"python","name":"tensor"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.12"}},"nbformat":4,"nbformat_minor":4}