{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nprint(os.listdir(\"../input\"))\n\nimport numpy as np\nimport math\nfrom PIL import Image\nfrom sklearn.neural_network import MLPClassifier\nfrom sklearn import metrics\n\n#константы\nsize  = 28  #размер изображений\nzones = 7   #количество зон по одной оси для метода зон\nminC  = 128 #миниамльное значение пикселя считающегося белым\n\n#загрузка изображений\ndef loadImage(path,digits):\n\n    result = []\n    Y      = []\n\n    for n in range(len(path)):\n        image = Image.open(path[n])\n        for y in range(round(image.size[1]/size)):\n            for x in range(round(image.size[0] / size)):\n                img = image.crop([x*size,y*size,(x+1)*size,(y+1)*size])\n                result.append(img.load())\n                Y.append(digits[n])\n\n    return result,Y\n\n#обработка изображений\ndef prepare(images,method):\n    \n    result = []\n    for img in images:\n        result.append(method(img))\n    return result\n\n#метод проекций\ndef projections(image, s, k):\n    \n    features = []\n    w = s / k\n    count = [0 for x in range (k*s)]\n    for i in range (s):\n        for j in range (s):\n            if image[i][j] > 200:\n                count[i*k + j//w] = 1\n    features.extend(count)\n    return features\n\n#метод зон\ndef Zones(img):\n    \n    szone = round(size/zones)\n    result = []\n\n    for x in range(0,size,szone):\n        for y in range(0,28,szone):\n            count = 0\n\n            for i in range(x,x+szone):\n                for j in range(y,y+szone):\n                    if(img[i,j] > minC):\n                        count += 1\n\n            result.append(count)\n    return result\n\n#метод проекционных гистограмм\ndef projection_histograms(img):\n    \n    result = []\n\n    for i in range(size):\n        x = 0\n        y = 0\n        for j in range(size):\n            if (img[i,j] > minC):\n                x += 1\n            if (img[j,i] > minC):\n                y += 1\n\n            result.append(x)\n            result.append(y)\n\n    return result\n\n#обучение ИИ и тест\ndef nnWork(X_train,Y_train,X_test,function,layer):\n    clf = MLPClassifier(solver='lbfgs',activation=function,hidden_layer_sizes=layer,random_state=1)\n    clf.fit(X_train,Y_train)\n    result = clf.predict(X_test)\n    m = metrics.accuracy_score(Y_test,result)\n    print(function,layer,m)\nlayers = [(22,22),(22,22,22),(22,22,22,22),(22,22,22,22,22), (22,22,22,22,22, 22), (22,22,22,22,22, 22, 22)]\n\nfunctions = [\"identity\",\"logistic\", \"tanh\", \"relu\"]\nmethods   = [Zones,projection_histograms,projections]\npath_train = [\"train.csv\"]\npath_test = [\"test.csv\"]\n\ndigits = [0,1,2,3,4,5,6,7,8,9]\n#загрузка изображений\ntrain,Y_train = loadImage(path_train,digits)\ntest,Y_test   = loadImage(path_test,digits)\n\n#тесты для разных методов, функций и слоев\nfor method in methods:\n    X_train = prepare(train,method)\n    X_test  = prepare(test,method)\n    print(method)\n    for layer in layers:\n        for function in functions:\nnnWork(X_train,Y_train,X_test,function,layer)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}