{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import random\nimport time\nimport os\n\nrandom.seed(time.time())\n\n# baseBet = 2\n# sat = 10\n# mult = 2\n# prob = 48\n# ink = 0.1\n\nparams = [[1.01, 94.06], [1.05, 90.48], [1.1, 86.36], [1.2, 79.17], [1.3, 73.08], [1.4, 67.86], [1.5, 63.33], \n[1.6, 59.89], [1.7, 55.88], [1.8, 52.78], [1.9, 50], [2, 47.5], [2.2, 43.18], [2.4, 38.58], [2.6, 36.54],\n[3, 31.67], [3.5, 27.14], [4, 23.75], [4.5, 20.65], [5, 19], [6, 15.83], [7, 13.57], [8, 11.88], [9, 10.56], \n[10, 9.5], [11.99, 7.92], [13.99, 6.79], [15.01, 6.33], [20, 4.75], [25, 3.8], [30, 3.17], [40, 2.38],\n[50, 1.9], [100, 0.95]]\n# print(params)\ndef doTheThing(prob, ink, baseBet, mult, baseSat):\n    countLose = 0\n    maxLose = 0\n    for a in range(200):\n        # os.system('cls' if os.name == 'nt' else 'clear')\n        # print(\"started iter #\" + str(a))\n\n        hi = True\n        \n        def isGood(flip):\n            if hi:\n                return flip > 10000 - prob * 100\n            return flip < prob * 100\n        sat = baseSat\n        bet = baseBet\n        maxMinus = 0\n        maxStreak = 0\n        currentMinus = 0\n        maxBet = 0\n        maxBalance = 0\n        minBet = 1\n        minBalance = sat\n        minB = baseBet\n        currentStreak = 0\n        \n        for i in range(0, 10000):\n            random.seed(time.time())\n            if sat > maxBalance:\n                maxBalance = sat\n            \n            if minBalance > sat:\n                minBalance = sat\n                \n            if minB > bet:\n                minB = bet\n            \n            if sat < bet:\n                countLose += 1\n                # print(\"End at \" + str(i) + \" iter.\")\n                break\n            sat -= bet\n            \n            if bet > maxBet:\n                maxBet = bet\n            \n            currentMinus -= bet\n            \n            if abs(currentMinus) > abs(maxMinus):\n                maxMinus = currentMinus\n                \n            \n            flip = random.randint(0, 10000)\n            if isGood(flip):\n                sat += bet * mult\n                bet = baseBet\n                currentMinus = 0\n                currentStreak = 0\n            else:\n                bet = round(bet * (ink))\n                if bet < minBet:\n                    bet = minBet\n                currentStreak += 1\n                if currentStreak > maxStreak:\n                    maxStreak = currentStreak\n            if sat > 100000:\n                \n                print(\"got it with\")\n                print(\"baseBet: \" + str(baseBet))\n                print(\"prob: \", + str(prob))\n                print(\"ink: \" + str(ink))\n                print(\"mult: \" + str(mult))\n                print(\"in: \" + str(a))\n                break\n            \n        # print(\"balance: \" + str(sat))\n        # print(\"maxMinus :\" + str(maxMinus))\n        # print(\"maxStreak: \" + str(maxStreak))\n        # print(\"maxBet: \" + str(maxBet))\n        # print(\"maxBalance: \" + str(maxBalance))\n        # print(\"minBet: \" + str(minB))\n        # print(\"minBalance: \" + str(minBalance))\n        # print()\n\n        if sat < baseSat * 1.1:\n            countLose += 1\n        if abs(maxMinus) > abs(maxLose):\n            maxLose = maxMinus\n    \n    # print(\"countLose: \" + str(countLose))\n    # print(\"maxLose: \" + str(maxLose))\n    if(countLose == 0):\n        print(\"totally got it with\")\n        print(\"baseBet: \" + str(baseBet))\n        print(\"prob: \" + str(prob))\n        print(\"ink: \" + str(ink))\n        print(\"mult: \" + str(mult))\n        # print(\"last sat: \" + str(sat))\n        print(\"baseSat: \" + str(baseSat))\n        print(\"maxLose: \" + str(maxLose))\n        \n    \nfor p in params:\n    print(\"starting with param: \")\n    print(p)\n    for cink in range(1, 100000, 1):\n        for cs in range(1, 200, 1):\n            for sat in range(50, 1000, 50):\n                doTheThing(p[0], cink/10, cs, p[1], sat)\n        ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import multiprocessing\n\nnum_cores = multiprocessing.gpu_count()\nprint(num_cores)\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nimport math, re, os\nimport random\nimport gc\nimport tensorflow as tf\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import KFold\nimport matplotlib.pyplot as plt\nfrom kaggle_datasets import KaggleDatasets\nfrom tensorflow import keras\nfrom functools import partial\nfrom tensorflow.keras import backend as K\nfrom sklearn.metrics import classification_report, accuracy_score\nfrom sklearn.model_selection import train_test_split\nprint(\"Tensorflow version \" + tf.__version__)\nfrom sklearn.metrics import accuracy_score\nfrom collections import Counter\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"class FixedDropout(tf.keras.layers.Dropout):\n    def _get_noise_shape(self, inputs):\n        if self.noise_shape is None:\n            return self.noise_shape\n        symbolic_shape = K.shape(inputs)\n        noise_shape = [symbolic_shape[axis] if shape is None else shape\n        for axis, shape in enumerate(self.noise_shape)]\n        return tuple(noise_shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dense201 = tf.keras.models.load_model('../input/train-model-cassava/densenet201.h5')\ninception = tf.keras.models.load_model('../input/train-model-cassava/inceptionv3.h5')\nefficient_net = tf.keras.models.load_model(\n    '../input/train-model-cassava/efficient_netb3.h5',\n    compile=False,\n    custom_objects={'FixedDropout':FixedDropout}\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"JPEG_PATH = \"../input/cassava-leaf-disease-classification/test_images\"\n\nimport cv2\n\ndef load_image(jpeg_path, image_id):\n    img = cv2.imread(os.path.join(jpeg_path, image_id))/255.0\n    img = cv2.resize(img, (512, 512))[:, :, ::-1]\n\n    return img\ndef generator(filepath, paths, batch_size=32):\n    i=0\n    print(len(paths))\n    while i <= len(paths):\n        batch = []\n        for cpt in range(batch_size):\n            if i + cpt >= len(paths):\n                i += batch_size\n                break\n            batch.append(load_image(filepath, paths[i+cpt]))\n            \n        i += batch_size\n        yield np.stack(batch)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.read_csv('../input/cassava-leaf-disease-classification/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def vote_in_ensemble(v1, v2, v3):\n    if v1 == v2:\n        return v1\n    if v2 == v3:\n        return v2\n    if v1 == v3:\n        return v3\n    return v1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def predict_for_pretrained(model):\n    ds_test = generator(JPEG_PATH,np.sort(submission.image_id.values)) \n    preds = np.argmax(model.predict(ds_test, verbose=True), axis=-1)\n    return preds\n\ndense_preds = predict_for_pretrained(dense201)\ninception_preds = predict_for_pretrained(inception)\nefficient_net_preds = predict_for_pretrained(efficient_net)\n\nresult = []\n\nfor idx, val in enumerate(dense_preds):\n    result.append(\n        vote_in_ensemble(\n            dense_preds[idx],\n            inception_preds[idx],\n            efficient_net_preds[idx]\n        )\n    )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission[\"label\"] = result\nsubmission.to_csv(\"submission.csv\", index=False)","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}