{"cells":[{"metadata":{"_uuid":"4bef6f59-345f-43e2-a7f1-2eccbfc24369","_cell_guid":"86f42c4d-b694-4bb2-90f0-446facbbeb2b","trusted":true},"cell_type":"code","source":"import tensorflow as tf\nimport multiprocessing\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D, BatchNormalization, MaxPool2D\nfrom keras.layers import Activation\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nimport os\nimport numpy as np\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e355a4e7-4cdc-4e8b-9ec0-c00aecba3960","_cell_guid":"67119e3e-a01d-47a0-a0af-c55d68ccc19f","trusted":true},"cell_type":"code","source":"\"\"\"\n!mv ../input/cat-and-dog/test_set/test_set/cats/*.jpg \n!mv ../input/cat-and-dog/test_set/test_set/dogs/*.jpg ../input/catndog/cats_and_dogs_filtered/train/dogs\n!mv ../input/cat-and-dog/training_set/training_set/cats/*.jpg ../input/catndog/cats_and_dogs_filtered/validation/cats\n!mv ../input/cat-and-dog/training_set/training_set/dogs/*.jpg ../input/catndog/cats_and_dogs_filtered/validation/dogs\n\"\"\"","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"7eb83209-ce65-4553-a15d-643c1a7e4fbb","_cell_guid":"23de173b-cce4-4e6c-9aa6-0327f4177467","trusted":true},"cell_type":"code","source":"PATH = os.path.join('..', 'input', 'cat-and-dog') #'catndog','cats_and_dogs_filtered') \ntrain_dir = os.path.join(PATH, 'training_set', 'training_set') #'train')\nvalidation_dir = os.path.join(PATH, 'test_set','test_set')#'validation')\n# directory with our training cat pictures\ntrain_cats_dir = os.path.join(train_dir, 'cats')\n# directory with our training dog pictures\ntrain_dogs_dir = os.path.join(train_dir, 'dogs')\n# directory with our validation cat pictures\nvalidation_cats_dir = os.path.join(validation_dir, 'cats')\n# directory with our validation dog pictures\nvalidation_dogs_dir = os.path.join(validation_dir, 'dogs')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8861bfb0-10d5-4bb9-964d-26a67811b81a","_cell_guid":"82670976-9adb-41c6-8b82-71f5e02bbc4b","trusted":true},"cell_type":"code","source":"num_cats_tr = len(os.listdir(train_cats_dir))\nnum_dogs_tr = len(os.listdir(train_dogs_dir))\nnum_cats_val = len(os.listdir(validation_cats_dir))\nnum_dogs_val = len(os.listdir(validation_dogs_dir))\ntotal_train = num_cats_tr + num_dogs_tr\ntotal_val = num_cats_val + num_dogs_val\nprint('total training cat images:', num_cats_tr)\nprint('total training dog images:', num_dogs_tr)\nprint('total validation cat images:', num_cats_val)\nprint('total validation dog images:', num_dogs_val)\nprint('—')\nprint('Total training images:', total_train)\nprint('Total validation images:', total_val)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"69dc26f3-5a6d-4e77-9420-161a313b4b34","_cell_guid":"d924c5ba-f44c-4700-9d30-df5e735dd8d4","trusted":true},"cell_type":"code","source":"batch_size = 128\nepochs = 15\nIMG_HEIGHT = 150\nIMG_WIDTH = 150","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f4c43de6-0078-46f8-afcc-66cc263df283","_cell_guid":"2b711bcc-0dcf-460b-a0fc-1d2d8e64b6f3","trusted":true},"cell_type":"code","source":"# Generator for our training data\ntrain_image_generator = ImageDataGenerator(rescale=1./255)\n# Generator for our validation data\nvalidation_image_generator = ImageDataGenerator(rescale=1./255)\ntrain_data_gen = train_image_generator.flow_from_directory(\n    batch_size=batch_size, \n    directory=train_dir,\n    shuffle=True,\n    target_size=(IMG_HEIGHT, IMG_WIDTH),\n    class_mode='categorical')\n\nval_data_gen = validation_image_generator.flow_from_directory(\nbatch_size=batch_size,\ndirectory=validation_dir,\ntarget_size=(IMG_HEIGHT, IMG_WIDTH),\nclass_mode='categorical')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"06a4b19a-e692-4f6b-a7f3-79e65ef191d8","_cell_guid":"7838198e-2ae0-4a93-bf1c-30e5ea3a4f6d","trusted":true},"cell_type":"code","source":"sample_training_images, _ = next(train_data_gen)\ndef plotImages(images_arr):\n    fig, axes = plt.subplots(1, 5, figsize=(20,20))\n    axes = axes.flatten()\n    for img, ax in zip( images_arr, axes):\n        ax.imshow(img)\n        ax.axis('off')\n    plt.tight_layout()\n    plt.show()\nplotImages(sample_training_images[:5])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d1ac8fae-87a3-406d-a473-eb4fa6c1ee71","_cell_guid":"cb64e982-1d27-4021-8f71-cb9144e85da2","trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"dcbfd995-f842-4596-8471-feb94c0b3fca","_cell_guid":"6d5a89c7-9643-4d4b-979b-32c90f5cf1ba","trusted":true},"cell_type":"code","source":"def print_even(v1,v2) :  \n    for i in v1:\n        for j in v2:\n            yield i+j\n  \n# initializing list  \ntest_list = [1, 4, 5, 6, 7] \n\n# printing even numbers  \nprint (\"The even numbers in list are : \", end = \" \") \nfor j in print_even(test_list, test_list): \n    print (j, end = \" \")","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"732fb1f4-e862-44cb-bdec-edbb20763e43","_cell_guid":"27301ffa-9bd3-4f14-82d2-d9359113476c","trusted":true},"cell_type":"code","source":"\"\"\"\n    model = Sequential([\n        Conv2D(filters=96, kernel_size=(11,11), strides=(4,4), activation='relu', input_shape=(227,227,3)),\n        BatchNormalization(),\n        MaxPool2D(pool_size=(3,3), strides=(2,2)),\n        Conv2D(filters=256, kernel_size=(5,5), strides=(1,1), activation='relu', padding=\"same\"),\n        BatchNormalization(),\n        MaxPool2D(pool_size=(3,3), strides=(2,2)),\n        Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), activation='relu', padding=\"same\"),\n        BatchNormalization(),\n        Conv2D(filters=384, kernel_size=(1,1), strides=(1,1), activation='relu', padding=\"same\"),\n        BatchNormalization(),\n        Conv2D(filters=256, kernel_size=(1,1), strides=(1,1), activation='relu', padding=\"same\"),\n        BatchNormalization(),\n        MaxPool2D(pool_size=(3,3), strides=(2,2)),\n        Flatten(),\n        Dense(4096, activation='relu'),\n        Dropout(0.5),\n        Dense(4096, activation='relu'),\n        Dropout(0.5),\n        Dense(10, activation='softmax')\n    ])\n    \n# Create model\nmodel = Sequential([\n    Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),\n    MaxPooling2D(),\n    Conv2D(32, 3, padding='same', activation='relu'),\n    MaxPooling2D(),\n    Conv2D(64, 3, padding='same', activation='relu'),\n    MaxPooling2D(),\n    Flatten(),\n    Dense(512, activation='relu'),\n    Dense(1)\n])\n\n\n\n\"\"\"","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"c06ae2eb-b5a3-4417-84da-39a31d85a73d","_cell_guid":"734e2ae1-4d98-4bb3-a3bd-6ceb9dd2c411","trusted":true},"cell_type":"code","source":"acclist = []\n\ndef attempt(l1,l2,l3,l11,l12,l13,s1,s2,s3,s4):\n    model = 0\n\n    model = Sequential([\n        Conv2D(l1, l11, padding='same', activation=s1, input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),\n        MaxPooling2D(),\n        Conv2D(l2, l12, padding='same', activation=s2),\n        MaxPooling2D(),\n        Conv2D(l3, l13, padding='same', activation=s3),\n        MaxPooling2D(),\n        Flatten(),\n        Dense(512, activation=s4),\n        Dense(1)\n    ])\n    \n    # Compile model\n    model.compile(\n        optimizer='adam',\n        loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),\n        metrics=['accuracy'])\n    \n    # Train the model\n    history = model.fit_generator(\n        train_data_gen,\n        steps_per_epoch=total_train // batch_size,\n        epochs=epochs,\n        validation_data=val_data_gen,\n        validation_steps=total_val // batch_size\n    )\n    acclist.append(history.history['accuracy'][0])\n\n#@@用很多for循环把attempt函数用各种变量的排列组合都跑一遍，找到'accuracy'最高的存入winner","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e869c161-c212-4920-a752-8a47a8addc7c","_cell_guid":"015306e5-9650-4eba-bcb0-1a6d2f2b8879","trusted":true},"cell_type":"code","source":"from keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense, Activation, BatchNormalization\nmodel = 0\n\nmodel = Sequential()\n\nmodel.add(Conv2D(32, (3, 3), activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH, 3)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(64, (3, 3), activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2DD(128, (3, 3), activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2, 2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\nmodel.add(Dense(512, activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.5))\nmodel.add(Dense(2, activation='softmax')) # 2 because we have cat and dog classes\n\nmodel.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])\n# Train the model\nhistory = model.fit_generator(\n    train_data_gen,\n    steps_per_epoch=total_train // batch_size,\n    epochs=epochs,\n    validation_data=val_data_gen,\n    validation_steps=total_val // batch_size\n)\nacclist.append(history.history['accuracy'][0])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"cbfdc153-53ec-478e-9fbd-d54bb1280ee9","_cell_guid":"e2caab4a-5cf6-4892-b950-39216701f646","trusted":true},"cell_type":"code","source":"attempt(16,32,64,3,3,3,'relu','relu','relu','relu')","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"119d4ff2-d62e-4893-92a5-163923d73dd6","_cell_guid":"70b791ca-01e5-448f-9dbe-49239bd541cd","trusted":true},"cell_type":"code","source":"maxacc=0\nllist = [16,32,64]\nl1list = [3,5]\nslist = ['relu']\nfor l1 in llist:\n    for l2 in llist:\n        for l3 in llist:\n            for l11 in l1list:\n                for l12 in l1list:\n                    for l13 in l1list:\n                        for s1 in slist: \n                            for s2 in slist: \n                                for s3 in slist: \n                                    for s4 in slist: \n                                        print(l1,l2,l3,l11,l12,l13,s1,s2,s3,s4)\n                                        attempt(l1,l2,l3,l11,l12,l13,s1,s2,s3,s4)\n                                        if maxacc<(acclist[-1]):\n                                            maxacc=acclist[-1]\n                                            winner=[l1,l2,l3,l11,l12,l13,s1,s2,s3,s4,maxacc]\n                                            print(\"%%\")\n\nprint(winner)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"158d73d8-9fad-4c45-ac09-5a79e18bff00","_cell_guid":"22937d45-cb67-442a-a92c-dddae967f620","trusted":true},"cell_type":"code","source":"# Predict\nresults = model.predict(sample_training_images[:5])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"e295a8bb-6103-49a6-921e-5e01d8d93a89","_cell_guid":"c366e427-e5fe-45c3-b74d-414ce7726d55","trusted":true},"cell_type":"code","source":"print(acclist)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"cbb0d9cf-35fb-4c48-ba2c-daffb572cd5e","_cell_guid":"54cff791-a937-4c26-b47b-b63a8ee96746","trusted":true},"cell_type":"code","source":"model.save('my_model.h5')\n# 重新创建完全相同的模型，包括其权重和优化程序\nnew_model = tf.keras.models.load_model('my_model.h5')\n# 显示网络结构\nnew_model.summary()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9e239a0b-c652-4bf9-96e0-2c314d694168","_cell_guid":"a692e466-1324-4b1d-873e-2b4fb9c67b17","trusted":true},"cell_type":"code","source":"!pip install tensorflowjs","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"297c34b7-65ed-4181-b7c6-37b2922ca1b2","_cell_guid":"74646c22-74b4-47e6-b686-91c76fac2515","trusted":true},"cell_type":"code","source":"!tensorflowjs_converter --input_format=keras ./my_model.h5 tfjs_model","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b41b7016-a88a-4b00-b6dd-7dfce10cf9e7","_cell_guid":"cf39787f-5d8b-4930-ad2e-69b99f7475ae","trusted":true},"cell_type":"code","source":"!zip -r downloadmeeeee.zip tfjs_model","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"79ea02cd-3072-4c09-8013-d8a2b9fcfb9c","_cell_guid":"0ef89b28-a2a3-493b-b8ee-ab0eae72557f","trusted":true},"cell_type":"code","source":"!ls -sh","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}