{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport matplotlib.pyplot as plt\nfrom PIL import Image\n\nimport tensorflow as tf\nimport tensorflow_datasets as tfds\n\nfrom tensorflow import keras\ntfds.disable_progress_bar()\n\nfrom keras.preprocessing import image","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = keras.Sequential([\n#     keras.layers.AveragePooling2D(6, 3, input_shape=(200, 200, 3)),\n#     keras.layers.Conv2D(64, 3, activation='relu'),\n    keras.layers.Conv2D(32, kernel_size=(3,3), input_shape=(300,300,3), activation='relu', padding='same'),\n    keras.layers.MaxPool2D(2, 2),\n#     keras.layers.Dropout(0.5),\n    keras.layers.Flatten(),\n    keras.layers.Dense(64, activation='relu'),\n    keras.layers.Dropout(0.5),\n    keras.layers.Dense(120, activation='softmax')\n])\n\nmodel.compile(optimizer='adam',\n              loss=keras.losses.CategoricalCrossentropy(),\n              metrics=['accuracy'])\n\nmodel.summary()\n\n# model.fit(X_train, y_train, epochs=2, batch_size=32)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n# from tensorflow.python.keras.applications.resnet50 import preprocess_input\nfrom tensorflow.python.keras.preprocessing.image import load_img, img_to_array\n\nimage_size = 224\nbatch_size = 128\n\ndef read_and_prep_images(img_paths, img_height=image_size, img_width=image_size):\n    imgs = [load_img(img_path, target_size=(img_height, img_width)) for img_path in img_paths]\n    img_array = np.array([img_to_array(img) for img in imgs])\n#     output = preprocess_input(img_array)\n    output = img_array\n    return(output)\n\ndef imageLoader(files, batch_size, labels, image_size):\n    L = len(files) \n    while True:\n        batch_start = 0\n        batch_end = batch_size\n        while batch_start < L:\n            limit = min(batch_end, L)\n            X = read_and_prep_images(files[batch_start:limit], img_height=image_size, img_width=image_size)\n            Y = labels[batch_start:limit]\n            yield (X,Y) #a tuple with two numpy arrays with batch_size samples     \n            batch_start += batch_size   \n            batch_end += batch_size\n            \ndef get_img_path(img_id):\n    image_path = os.path.join(\"../input/dog-breed-identification/train\",img_id+'.jpg')\n    return image_path\n\nfrom sklearn.model_selection import train_test_split\n\ntrain_labels = pd.read_csv('/kaggle/input/dog-breed-identification/labels.csv')\nY = pd.get_dummies(train_labels['breed'])\nlabels = Y.values\nimg_paths = train_labels['id'].apply(get_img_path).values\n\ntrain_images,test_images,train_labels,test_labels = train_test_split(img_paths,labels,test_size=0.1)            \n\nx_test = read_and_prep_images(test_images, img_height=image_size, img_width=image_size)\n\nmodel.fit_generator(imageLoader(train_images,batch_size, train_labels, image_size),epochs=5, validation_data = zip(x_test, test_labels)) #steps_per_epoch=..., ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}