MultiLayerPerceptron/mlp.ipynb

1224 lines
183 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"from pnmimage import PnmImage\n",
"\n",
"class LettersData(object):\n",
" def __init__(self):\n",
" self.expected_data_list = []\n",
" self.expected_letters = []\n",
" self.letter_to_int = {}\n",
" self.letters_classes = {}\n",
" self.extract_vocab = []\n",
" self.vocab = {}\n",
" self._images = []\n",
" self._expected_values = []\n",
" self.nb_vocab = 0\n",
" self.input_image_size = 0\n",
" self.selection_vocab = {}\n",
" self.selection_batch = []\n",
" self.letter_to_vector = {}\n",
" self.vector_to_letter = {}\n",
"\n",
" def _gen_ext_filenames_list(self):\n",
" for ln in range(100):\n",
" for car in range(100):\n",
" n = \"data/ext_ln{}_car{}.pgm\".format(ln, car)\n",
" if os.path.exists(n) and n.replace('data/', '') in self.filenames_list:\n",
" yield(n)\n",
"\n",
" def _get_expected_letters_list(self):\n",
" \"\"\"Get expected letters list from expected data file.\n",
"\n",
" :return: list of tuples with the letter and the corresponding filename\n",
"\n",
" \"\"\"\n",
" data_list = []\n",
" name = \"list_expected_data.txt\"\n",
" with open(name) as f:\n",
" lst = [(line.split(\" \")[0], line.split(\" \", 1)[1].replace('\\n', '')) for line in f.readlines() if line.strip() != '']\n",
" # list of tuples with (letter, filename)\n",
" data_list = [(e[1], e[0]) for e in lst]\n",
" return data_list\n",
"\n",
" def _extract_data(self):\n",
" \"\"\"Extract data.\n",
" Create list of expected letters/filenames, base letters with info, classes.\n",
" \"\"\"\n",
" self.expected_data_list = self._get_expected_letters_list()\n",
" \"\"\"list of tuples with letter and filename\"\"\"\n",
" self.extract_vocab = sorted(set([l[0] for l in self.expected_data_list]))\n",
" \"\"\"list of data vocab letters sorted\"\"\"\n",
" self.nb_vocab = len(self.extract_vocab)\n",
"\n",
" self.vocab = {}\n",
" letters_list = [l[0] for l in self.expected_data_list]\n",
" for i, c in enumerate(self.extract_vocab):\n",
" vec = [0] * self.nb_vocab\n",
" vec[i] = 1\n",
" self.vocab[c] = {\n",
" 'index': i,\n",
" 'count': letters_list.count(c),\n",
" 'vector': vec\n",
" }\n",
" self.letter_to_int = {c: i for i, c in enumerate(self.extract_vocab)}\n",
" \"\"\"dict of letters with index of each\"\"\"\n",
" self.letters_classes = {}\n",
" \"\"\"dict of letters with vector representation of each letter\"\"\"\n",
"\n",
" for letter, idx in self.letter_to_int.items():\n",
" cls = [0] * self.nb_vocab\n",
" cls[idx] = 1\n",
" self.letters_classes[letter] = cls\n",
"\n",
" def get_vocab_with_min_count(self, min_count):\n",
" \"\"\"Get the vocab. A dictionary of letters with count, index and vector.\n",
" The index is re-computed and also the vector to match the number of subelements\n",
" \"\"\"\n",
" subvocab = {}\n",
" i = 0\n",
" for c, info in self.vocab.items():\n",
" if info['count'] >= min_count:\n",
" subvocab[c] = {\n",
" 'count': info['count'],\n",
" 'index': i,\n",
" 'vector': None\n",
" }\n",
" i += 1\n",
" nb_vocab = len(subvocab)\n",
" self.letter_to_vector = {}\n",
" self.vector_to_letter = {}\n",
" for c in subvocab:\n",
" vec = [0] * nb_vocab\n",
" vec[subvocab[c]['index']] = 1\n",
" subvocab[c]['vector'] = vec\n",
" self.letter_to_vector[c] = vec\n",
" return subvocab\n",
"\n",
" def get_letter_of_vector(self, vector):\n",
" \"\"\"Get the letter corresponding to a given vector.\n",
"\n",
" :return: the found letter else None\n",
" \"\"\"\n",
" ret = None\n",
" for letter, vec in self.letter_to_vector.items():\n",
" if vec == vector:\n",
" ret = letter\n",
" break\n",
" return ret\n",
"\n",
" def get_batches(self, min_count=0, mini_batch_size=None):\n",
" \"\"\"Get the selection data based on min count of letters in the dataset\n",
"\n",
" :param min_count: minimal count of same letters to be added (default 0 for the whole dataset)\n",
" :param mini_batch_size: size of a mini batch, if None the whole dataset size (default None)\n",
" if whole size is not factor of the mini batch size then the last mini batch\n",
" has a size < mini batch size\n",
" :return: a list of mini batches (at least list of one)\n",
" \"\"\"\n",
" if mini_batch_size is None:\n",
" mini_batch_size = len(self.expected_data_list)\n",
" self.selection_vocab = self.get_vocab_with_min_count(min_count)\n",
" self.selection_batch = []\n",
" X = []\n",
" Y = []\n",
" bsize = 0\n",
" for letter, name in self.expected_data_list:\n",
" path = 'data/{}'.format(name)\n",
" if letter in self.selection_vocab:\n",
" img = PnmImage()\n",
" if img.load(path) == False:\n",
" print(\"ERROR: failed to open '{}'\".format(path))\n",
" image_size = img.get_size()\n",
" bsize += 1\n",
" X.append(img.get_data_bin())\n",
" Y.append(self.selection_vocab[letter]['vector'])\n",
" if bsize >= mini_batch_size:\n",
" self.selection_batch.append((X, Y))\n",
" X = []\n",
" Y = []\n",
" bsize = 0\n",
" if bsize > 0:\n",
" self.selection_batch.append((X, Y))\n",
" return self.selection_batch\n",
"\n",
" def process(self):\n",
" self._extract_data()\n",
"\n",
" def get_data_with_min_count(self, min_count):\n",
" vocab = self.get_vocab_with_min_count(min_count)\n",
" #todo\n",
" return images, expected_values\n",
" \n",
" def get_vocab(self):\n",
" \"\"\"Get the vocab. A dictionary of letters with count, index and vector\"\"\"\n",
" return self.vocab\n",
"\n",
" def get_classes(self):\n",
" return self.letters_classes\n",
"\n",
" def get_class_element_size(self):\n",
" return self.nb_vocab\n",
"\n",
" def get_input_image_size(self):\n",
" return self.input_image_size"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'a': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 'index': 8, 'count': 36}, 'e': {'vector': [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 1, 'count': 117}, 'i': {'vector': [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], 'index': 7, 'count': 75}, 'o': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], 'index': 10, 'count': 39}, 'c': {'vector': [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 0, 'count': 30}, 'u': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], 'index': 9, 'count': 55}, 'd': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 'index': 11, 'count': 45}, 'l': {'vector': [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 2, 'count': 64}, 'r': {'vector': [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 3, 'count': 42}, 'n': {'vector': [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], 'index': 4, 'count': 75}, 't': {'vector': [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], 'index': 6, 'count': 64}, 's': {'vector': [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], 'index': 5, 'count': 40}}\n",
"12\n",
"1\n",
"number of batches=1\n",
"size of first batch=577,577\n",
"size of last batch=577,577\n",
"300 9\n"
]
}
],
"source": [
"data = LettersData()\n",
"data.process()\n",
"#x,y = data.get_data()\n",
"#classes = data.get_classes()\n",
"#ysize = data.get_class_element_size()\n",
"#xsize = data.get_input_image_size()\n",
"#print(len(classes))\n",
"#print(len(classes['P']))\n",
"#print(xsize,ysize)\n",
"#print(len(x))\n",
"#print(len(y))\n",
"#print(y[5])\n",
"#print(data.get_vocab())\n",
"v=data.get_vocab_with_min_count(30)\n",
"print(v)\n",
"print(len(v))\n",
"batch = data.get_batches()\n",
"print(len(batch))\n",
"batch = data.get_batches(min_count=40, mini_batch_size=577)\n",
"print(\"number of batches={}\".format(len(batch)))\n",
"print(\"size of first batch={},{}\".format(len(batch[0][0]),len(batch[0][1])))\n",
"print(\"size of last batch={},{}\".format(len(batch[-1][0]),len(batch[-1][1])))\n",
"xsize = len(batch[0][0][0])\n",
"ysize = len(batch[0][1][0])\n",
"print(xsize, ysize)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0 2 4 6 9]\n",
" [1 3 5 7 8]]\n",
"[[0 0 0 0 1]\n",
" [1 1 1 1 0]]\n",
"[[11 2 13 4]\n",
" [ 5 6 7 8]]\n",
"[[1 0 1 0]\n",
" [0 1 0 1]]\n",
"1\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"def output_to_hard(output):\n",
" m = output.shape[1]\n",
" hard = np.zeros_like(output)\n",
" hard[output.argmax(0), np.arange(m)] = 1\n",
" return hard\n",
"\n",
"\n",
"def count_errors(output, expected_output):\n",
" \"\"\"Count the number of patterns different assuming dimension (n, m)\n",
" having m patterns of size n\n",
" \"\"\"\n",
" # check differences\n",
" err = np.equal(output,expected_output)\n",
" # invert such as true means not equal\n",
" ierr = np.invert(err)\n",
" # count number of bad values for each column\n",
" nb = np.count_nonzero(ierr, axis=0)\n",
" # count number of errors\n",
" nb_err = np.count_nonzero(nb)\n",
" return nb_err\n",
" \n",
"\n",
"\n",
"a = np.array([[0, 1], [2, 3], [4, 5], [6, 7], [9, 8]]).T\n",
"print(a)\n",
"print(output_to_hard(a))\n",
"a = np.array([[11,2,13,4],[5,6,7,8]])\n",
"print(a)\n",
"b = np.array([[1, 0, 1, 0], [1, 1, 0, 1]])\n",
"h = output_to_hard(a)\n",
"print(h)\n",
"\n",
"print(count_errors(h, b))\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0. 3.]\n",
"False\n",
"True\n"
]
}
],
"source": [
"def all_axis_equal(n, axis=0):\n",
" \"\"\"\n",
" :param axis: if 0 check that all columns are equal, if 1 chech rows\n",
" \"\"\"\n",
" if axis == 0:\n",
" res = np.std(n, axis=1)\n",
" else:\n",
" res = np.std(n)\n",
" res = np.sum(res)\n",
" return res == 0.\n",
"\n",
"\n",
"def axis_equal(n, axis=0):\n",
" \"\"\"\n",
" :param axis: if 0 check that all columns are equal, if 1 chech rows\n",
" \"\"\"\n",
" if axis == 0:\n",
" res = np.std(n, axis=1)\n",
" else:\n",
" res = np.std(n)\n",
" return res\n",
"\n",
"\n",
"a=np.array([[1,-2,3,4],[5,6,-7,8]])\n",
"all_axis_equal(a)\n",
"a=np.array([[1,-2,3,4],[1,6,-7,8]])\n",
"all_axis_equal(a) \n",
"\n",
"a = np.array([[-1., -1.], [-3., 3]])\n",
"print(np.std(a,axis=1))\n",
"\n",
"b=np.array([[-2,-2,-2],[5,6,-7]])\n",
"print(all_axis_equal(b))\n",
"b=np.array([[-2,-2,-2],[5,5,5]])\n",
"print(all_axis_equal(b))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 0, 1, 0, 0, 0, 0, 0, 0]\n",
"tanh factor=0.05773502691896258\n",
"tanh factor=0.023570226039551584\n",
"tanh factor=0.040824829046386304\n",
"tanh factor=0.05773502691896258\n",
"softmax factor=0.01\n",
"nb errors before training=457/577\n",
"Training...\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fc98b5bb0b8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"learning duration=313.1954004764557(s)\n",
"{'cost_function': 0.165661765655898, 'iterations': 400}\n",
"nb errors=55/577\n"
]
}
],
"source": [
"from mlp import MultiLayerPerceptron\n",
"import time\n",
"import numpy as np\n",
"X, Y = np.array(batch[0][0]), np.array(batch[0][1])\n",
"xsize = len(batch[0][0][0])\n",
"ysize = len(batch[0][1][0])\n",
"print(batch[0][1][0])\n",
"m = len(batch[0][0])\n",
"mlp = MultiLayerPerceptron(L=5, n=[xsize, 1800, 600, 300, 30, ysize], g=[\"tanh\"]*4 + [\"softmax\"], alpha=0.001, set_random_w=False)# w_rand_factor=0.01)\n",
"mlp.init_random_weights(use_formula=True)\n",
"#mlp.use_regularization(0.1)\n",
"mlp.use_adam()\n",
"\n",
"# Compute output\n",
"output = mlp.compute_outputs(X.T)\n",
"hard_output = output_to_hard(output)\n",
"mlp.set_all_expected_output_examples(Y.T)\n",
"expected_output = mlp.get_expected_output()\n",
"print(\"nb errors before training={}/{}\".format(count_errors(hard_output, expected_output), output.shape[1]))\n",
"\n",
"# Proceed learning with gradient descent\n",
"print(\"Training...\")\n",
"t0 = time.time()\n",
"res = mlp.learning(X.T, Y.T, m, min_cost=0.0005, max_iter=400, plot=True)\n",
"t1 = time.time()\n",
"print(\"learning duration={}(s)\".format(t1-t0))\n",
"print(res)\n",
"\n",
"output = mlp.get_output()\n",
"hard_output = output_to_hard(output)\n",
"expected_output = mlp.get_expected_output()\n",
"print(\"nb errors={}/{}\".format(count_errors(hard_output, expected_output), output.shape[1]))\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0 1 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" [1 0 0 ... 1 0 0]\n",
" ...\n",
" [0 0 0 ... 0 1 0]\n",
" [0 0 0 ... 0 0 1]\n",
" [0 0 0 ... 0 0 0]]\n",
"out=[[1.20974679e-03 9.94810203e-01 1.81144828e-03 ... 1.21511565e-03\n",
" 9.06859226e-04 1.31348417e-04]\n",
" [1.89512803e-03 2.11689863e-04 7.43912078e-05 ... 1.89605227e-03\n",
" 5.79609227e-03 3.18173844e-04]\n",
" [9.81964661e-01 6.98882514e-04 3.10199130e-06 ... 9.81971394e-01\n",
" 8.67877832e-04 5.21368855e-06]\n",
" ...\n",
" [1.15257668e-03 7.73124214e-04 4.52359346e-05 ... 1.15608559e-03\n",
" 9.75057094e-01 1.49883192e-05]\n",
" [8.41201862e-06 8.08946746e-05 1.13639649e-02 ... 8.41791178e-06\n",
" 9.76566627e-06 9.80475500e-01]\n",
" [8.87554173e-05 3.38173023e-05 2.15643124e-03 ... 8.91617413e-05\n",
" 2.32828424e-05 3.03532518e-03]]\n",
"alleq? = False\n",
"eq? = [0.39963611 0.31029355 0.25476702 0.3301145 0.25201999 0.30368108\n",
" 0.32692957 0.28733344 0.26546751]\n",
"hout=[[0. 1. 0. ... 0. 0. 0.]\n",
" [0. 0. 0. ... 0. 0. 0.]\n",
" [1. 0. 0. ... 1. 0. 0.]\n",
" ...\n",
" [0. 0. 0. ... 0. 1. 0.]\n",
" [0. 0. 0. ... 0. 0. 1.]\n",
" [0. 0. 0. ... 0. 0. 0.]]\n",
"alleq? = False\n",
"expout=[[0 1 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" [1 0 0 ... 1 0 0]\n",
" ...\n",
" [0 0 0 ... 0 1 0]\n",
" [0 0 0 ... 0 0 1]\n",
" [0 0 0 ... 0 0 0]]\n",
"nb errors=0\n",
"ieq? = [0. 0. 0. 0. 0.04159445 0.04159445\n",
" 0. 0.04159445 0.05877236 0. 0. 0.\n",
" 0. 0. 0. 0. 0.05877236 0.14840052\n",
" 0.05877236 0.12391378 0.15912484 0.10947391 0. 0.\n",
" 0. 0. 0. 0. 0.1996606 0.30524256\n",
" 0.17384666 0.15912484 0.21848089 0.18292235 0. 0.\n",
" 0. 0. 0. 0. 0.25400445 0.34916742\n",
" 0.24497509 0.15386591 0.25400445 0.23548517 0. 0.\n",
" 0. 0. 0. 0. 0.22201304 0.36283563\n",
" 0.29365729 0.11692983 0.26540807 0.26262075 0. 0.\n",
" 0. 0. 0. 0. 0.17845063 0.32849489\n",
" 0.30298078 0.10144201 0.26540807 0.26540807 0. 0.\n",
" 0. 0.05877236 0.04159445 0.04159445 0.17845063 0.34738218\n",
" 0.31403124 0.15912484 0.27086342 0.26540807 0. 0.\n",
" 0. 0.14270495 0.17384666 0.21848089 0.36283563 0.46536942\n",
" 0.44766404 0.35613459 0.32243155 0.27086342 0. 0.\n",
" 0. 0.25692035 0.32447451 0.42867576 0.4758936 0.49479993\n",
" 0.48113491 0.4758936 0.43766237 0.30968748 0. 0.\n",
" 0. 0.34191784 0.42971151 0.49772331 0.49966874 0.49945229\n",
" 0.48113491 0.49401623 0.48304144 0.39947913 0. 0.\n",
" 0.04159445 0.38438942 0.48395465 0.4981938 0.49918159 0.49978294\n",
" 0.46932204 0.4844013 0.49772331 0.44142084 0. 0.\n",
" 0.10144201 0.37549571 0.49681727 0.49719801 0.49804305 0.49772331\n",
" 0.43474966 0.39005198 0.49479993 0.45429764 0. 0.\n",
" 0.13050156 0.37241944 0.49945229 0.49936808 0.47963429 0.49620022\n",
" 0.43474966 0.36609093 0.47963429 0.45104631 0.04159445 0.\n",
" 0.13050156 0.36928501 0.49993917 0.49598225 0.44592287 0.49317647\n",
" 0.43474966 0.34191784 0.46995521 0.45104631 0.04159445 0.\n",
" 0.05877236 0.33436749 0.49873612 0.49873612 0.45818189 0.48888231\n",
" 0.43276226 0.36769552 0.47533153 0.45021313 0.04159445 0.\n",
" 0. 0.29125401 0.49031788 0.49966874 0.49978294 0.49945229\n",
" 0.47301311 0.45968067 0.48612205 0.44937172 0.13675044 0.\n",
" 0. 0.22547654 0.42657558 0.49132761 0.49788622 0.49993917\n",
" 0.48527482 0.46671642 0.45104631 0.4189163 0.17384666 0.\n",
" 0. 0.11692983 0.31403124 0.43376056 0.45893516 0.46671642\n",
" 0.43474966 0.37549571 0.34005922 0.33243052 0.07191852 0.\n",
" 0. 0.04159445 0.15386591 0.23870299 0.31403124 0.35441835\n",
" 0.33243052 0.22201304 0.21487672 0.20359342 0.04159445 0.\n",
" 0. 0.04159445 0.04159445 0.04159445 0.05877236 0.08297199\n",
" 0.07191852 0. 0. 0. 0. 0.\n",
" 0. 0.04159445 0.04159445 0.04159445 0. 0.\n",
" 0. 0. 0. 0. 0. 0.\n",
" 0. 0.04159445 0.04159445 0.04159445 0. 0.\n",
" 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0. 0. 0.\n",
" 0. 0. 0. 0.04159445 0.04159445 0.04159445\n",
" 0. 0. 0. 0. 0. 0. ]\n",
"i? = [[0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" ...\n",
" [0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]\n",
" [0 0 0 ... 0 0 0]]\n",
"diff exp= [117 64 42 75 40 64 75 55 45]\n",
"[[-0.01319087 0.03983991 -0.05525597 ... -0.03207711 0.06692414\n",
" -0.06375975]\n",
" [ 0.03026753 0.01874685 0.00903375 ... 0.01605231 -0.08379402\n",
" 0.04562931]\n",
" [ 0.04805276 0.05503196 -0.00389218 ... 0.0183783 0.01674333\n",
" 0.02185625]\n",
" ...\n",
" [ 0.02624143 0.03224954 -0.00911125 ... -0.08354134 0.03582595\n",
" 0.05569943]\n",
" [-0.02090887 -0.09105613 -0.09100615 ... -0.01404412 0.03874845\n",
" -0.06491289]\n",
" [-0.01343145 -0.03273509 0.08220062 ... -0.03275636 -0.00326426\n",
" -0.03555161]]\n",
"float64\n",
"[[-0.01420414 -0.07207896 0.05688704 ... 0.01537264 0.0084524\n",
" -0.03883495]\n",
" [-0.02508493 0.05414954 -0.03563722 ... -0.0120563 0.02642832\n",
" 0.00609925]\n",
" [ 0.02473474 -0.05099813 0.07484969 ... 0.04273742 0.02562809\n",
" -0.07692152]\n",
" ...\n",
" [-0.03358954 -0.01829128 -0.00578833 ... 0.01829952 0.04571721\n",
" 0.0090804 ]\n",
" [-0.02371952 -0.0468924 -0.00054122 ... -0.07090847 -0.10107239\n",
" 0.05067513]\n",
" [ 0.06595318 -0.01398758 0.05028443 ... 0.05333875 0.04927292\n",
" -0.02119925]]\n",
"float64\n",
"[[-8.55127946e-05 -7.84591675e-02 -8.40214908e-02 ... 3.15381766e-02\n",
" -1.12010893e-01 -3.72282552e-02]\n",
" [-4.90402044e-02 1.05809792e-01 4.49151540e-02 ... 1.60301369e-02\n",
" 1.08550765e-02 4.97082262e-02]\n",
" [-3.14740462e-03 -5.69982483e-02 6.10231506e-02 ... -9.82526432e-03\n",
" -1.00127875e-02 -2.95810917e-02]\n",
" ...\n",
" [ 7.44480556e-02 -8.96343933e-02 8.58785577e-02 ... 8.83387786e-02\n",
" 1.47955664e-02 3.44082262e-02]\n",
" [-2.24684582e-02 -4.73644174e-02 1.19620978e-02 ... 1.70987684e-02\n",
" 3.50440139e-02 -4.66940708e-02]\n",
" [ 3.09912631e-03 -6.89806131e-03 -7.89365570e-03 ... -3.30881538e-02\n",
" 2.85286642e-02 -1.70303674e-02]]\n",
"float64\n",
"[[ 0.24292825 0.03875353 -0.04838829 ... 0.0454464 0.02616454\n",
" 0.07085865]\n",
" [-0.14605033 -0.10255992 -0.0691534 ... -0.14221534 0.05441646\n",
" 0.14363908]\n",
" [ 0.01758933 -0.09676504 -0.07188088 ... 0.01573355 -0.0923651\n",
" 0.04113277]\n",
" ...\n",
" [ 0.0312834 -0.10207391 0.04388697 ... -0.07270399 0.09358967\n",
" 0.09282296]\n",
" [-0.06778366 -0.08155462 0.07426104 ... 0.00879056 0.00224737\n",
" -0.04201017]\n",
" [-0.01397604 0.0525786 0.10673341 ... -0.09476817 0.04172221\n",
" -0.01653008]]\n",
"float64\n",
"[[ 0.23821056 -0.22684595 -0.23900313 -0.22307994 -0.20820359 0.21907111\n",
" 0.2448129 0.24406478 -0.22086667 0.23578465 0.23068728 0.21603837\n",
" -0.22015416 0.2273947 -0.23359408 0.24316205 -0.22599274 0.2448828\n",
" -0.24577126 -0.24073814 0.23409303 -0.23673416 -0.23429848 0.23798849\n",
" 0.23932448 0.21756492 0.24914489 -0.22336549 -0.23481061 0.22419405]\n",
" [-0.27508135 0.32318242 -0.19603446 -0.17095617 0.28092267 -0.22193898\n",
" 0.2064782 0.21149604 0.24927926 -0.18680937 0.18140982 -0.39328247\n",
" 0.19041642 0.29306423 0.18480645 -0.16989218 0.17698483 0.22529679\n",
" 0.28864704 0.29179007 0.18312231 0.11926081 0.19092834 -0.36227006\n",
" 0.20152464 -0.36845687 0.21825649 -0.18537252 -0.17231761 0.30279298]\n",
" [ 0.46419226 -0.29144274 -0.21979831 -0.05094548 -0.31265563 0.47694825\n",
" 0.21698027 0.20500537 -0.3472583 -0.23602106 0.22101996 -0.48007579\n",
" 0.26360475 -0.3382583 0.28820103 -0.23432914 0.22947567 -0.32274213\n",
" 0.29304505 -0.33211153 0.04733828 0.29491651 0.23421252 0.31340982\n",
" 0.20929533 -0.42883819 0.19781346 -0.04543647 -0.04600597 -0.33294682]\n",
" [-0.31456648 0.20993413 0.19555102 0.20091824 -0.34795958 0.26313773\n",
" -0.19932059 -0.17993067 -0.52906611 0.1240308 -0.20147313 0.24848163\n",
" -0.10781514 0.40899696 -0.25332736 0.12730197 -0.12683918 0.1279312\n",
" -0.33570855 0.19567551 -0.20399474 -0.27108015 -0.11943421 -0.18252667\n",
" -0.1943781 0.27768788 -0.1779427 0.20619189 0.19658291 0.24801077]\n",
" [ 0.28003775 -0.24656041 0.28472025 -0.25652722 -0.2377857 -0.23329018\n",
" -0.27871007 -0.27570175 0.26014691 -0.22671371 -0.29918768 0.24169636\n",
" -0.28768855 -0.26286965 -0.31427227 -0.23271245 0.22844887 -0.24899349\n",
" -0.27570961 -0.25358862 0.25124158 0.2363703 0.21089628 0.23576767\n",
" -0.26226596 0.26027226 -0.28453235 -0.22935687 -0.24720796 -0.22933093]\n",
" [-0.48565335 -0.2465881 -0.25622676 -0.04974842 -0.58824049 -0.4359546\n",
" 0.26816899 0.27414157 0.43796671 -0.15452496 0.24515537 0.48205664\n",
" 0.25450998 -0.54418601 0.26754159 -0.16829142 0.16721371 -0.23252322\n",
" 0.50158931 -0.56668704 0.04247801 0.15834625 0.1594734 0.24067279\n",
" 0.2675666 0.48407097 0.25866951 -0.02778181 -0.04470741 -0.27621571]\n",
" [-0.27267255 -0.45886523 -0.17510706 -0.10178899 0.53651062 -0.22984801\n",
" 0.17242844 0.18302742 0.24916311 -0.15973133 0.16812989 0.42202693\n",
" 0.20222694 0.57612452 0.20409242 -0.18444391 0.18391435 -0.41807628\n",
" -0.14789935 0.52621514 0.1074553 0.20447943 0.15627734 0.44518614\n",
" 0.18899705 0.43286293 0.18514295 -0.09809536 -0.08563168 -0.41710236]\n",
" [-0.37013803 0.1514176 0.14143475 0.14731253 0.59306704 0.37691993\n",
" -0.14372632 -0.14582787 0.35884516 0.1232747 -0.16096911 -0.6223161\n",
" -0.10444428 -0.58816294 -0.36665509 0.13995272 -0.16113298 0.1199828\n",
" 0.26052948 0.15022914 -0.16074082 -0.36866975 -0.16849907 -0.15080841\n",
" -0.14371455 0.34354818 -0.14782671 0.15418654 0.15257981 0.35531016]\n",
" [ 0.35711621 0.17086082 0.16602409 0.18400076 0.33281758 -0.34217298\n",
" -0.1747656 -0.17333453 -0.36443979 0.19588652 -0.19034869 -0.33569957\n",
" -0.1910823 -0.36717338 0.37378397 0.17310205 -0.16627789 0.13600294\n",
" -0.30896351 0.19230081 -0.18328413 0.38301521 -0.16365957 -0.16838064\n",
" -0.17065042 -0.35753259 -0.15901984 0.18156503 0.16853124 -0.35185653]]\n",
"float64\n",
"[1800, 600, 300, 30, 9]\n"
]
}
],
"source": [
"print(mlp.get_expected_output())\n",
"o = mlp.get_output()#[:,:5]\n",
"print(\"out={}\".format(o))\n",
"print(\"alleq? =\",all_axis_equal(o))\n",
"print(\"eq? =\",axis_equal(o))\n",
"h = output_to_hard(o)\n",
"print(\"hout={}\".format(h))\n",
"print(\"alleq? =\",all_axis_equal(h))\n",
"e = mlp.get_expected_output()#[:,:5]\n",
"print(\"expout={}\".format(e))\n",
"print(\"nb errors={}\".format(count_errors(h, e)))\n",
"#print(mlp.get_weights())\n",
"i = mlp.get_input()\n",
"print(\"ieq? =\",axis_equal(i))\n",
"print(\"i? =\",i)\n",
"print(\"diff exp=\", np.sum(e,axis=1))\n",
"W=mlp.get_weights()\n",
"ln=[]\n",
"for w in W:\n",
" print(w)\n",
" ln.append(len(w))\n",
" print(w.dtype)\n",
"print(ln)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[540000, 1080000, 180000, 9000, 270]\n",
"14474184\n",
"ok\n",
"[1800, 600, 300, 30, 9]\n",
"21936\n",
"ok\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import struct\n",
"\n",
"def save_params(params, name):\n",
" ret = False\n",
" nb = len(params)\n",
" n_params = [p.size for p in params]\n",
" fmt=\"<I\" + \"I\"*nb + \"\".join([\"d\"*n for n in n_params])\n",
" data = [nb] + n_params\n",
" for p in params:\n",
" data += p.flatten().tolist()\n",
" print(n_params)\n",
"\n",
" raw = struct.pack(fmt, *data)\n",
" print(len(raw))\n",
" with open(name, \"wb\") as f:\n",
" f.write(raw)\n",
" ret = True\n",
" print(\"ok\")\n",
" return ret\n",
"\n",
"W=mlp.get_weights()\n",
"err = count_errors(h, e)\n",
"save_params(W, \"weights_\"+str(err)+\"-577.params\")\n",
"b=mlp.get_bias()\n",
"b = mlp._b[1:]\n",
"save_params(b, \"bias_\"+str(err)+\"-577.params\")\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6\n"
]
}
],
"source": [
"b = mlp._b\n",
"print(len(b))"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168d17748>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031307411466539793}\n",
"[[ 0.01201341 0.98092967 0.98092663 0.02404195]\n",
" [ 0.98798659 0.01907033 0.01907337 0.97595805]]\n",
"[array([[-2.40378742, 2.05154928],\n",
" [ 1.09713928, 1.09693386],\n",
" [ 2.05046244, -2.40358981]]), array([[ 2.57638752, 0.99113136, 2.57718917],\n",
" [-2.60126558, -0.77456271, -2.6004823 ]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168c3dcc0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031190216120355926}\n",
"[[ 0.01277621 0.9811383 0.98114161 0.02333379]\n",
" [ 0.98722379 0.0188617 0.01885839 0.97666621]]\n",
"[array([[-1.01205709, -1.01200878],\n",
" [ 2.08751553, -2.38975991],\n",
" [-2.38947784, 2.08601873]]), array([[-0.78583897, 2.64231438, 2.5581069 ],\n",
" [ 0.77756604, -2.57364066, -2.65805014]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168c96da0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.03171314920552748}\n",
"[[ 0.01947007 0.97421129 0.98964546 0.01990589]\n",
" [ 0.98052993 0.02578871 0.01035454 0.98009411]]\n",
"[array([[ 1.31420216, -1.30600905],\n",
" [-1.99140538, -2.44175863],\n",
" [-2.37396126, -1.90332763]]), array([[ 1.09790652, -2.56363219, 2.62272519],\n",
" [-1.17325226, 2.53073242, -2.49247235]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168ab11d0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031608250656706208}\n",
"[[ 0.01040672 0.98043232 0.98045294 0.02558199]\n",
" [ 0.98959328 0.01956768 0.01954706 0.97441801]]\n",
"[array([[ 1.95863856, -2.4323066 ],\n",
" [ 1.29725725, 1.29857176],\n",
" [ 2.43125627, -1.95172388]]), array([[ 2.60363554, 1.11416206, -2.65643781],\n",
" [-2.49021505, -1.09446745, 2.43728256]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168d9b860>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031173368398727086}\n",
"[[ 0.01325791 0.98116572 0.98116461 0.02288485]\n",
" [ 0.98674209 0.01883428 0.01883539 0.97711515]]\n",
"[array([[ 0.94818634, 0.94787128],\n",
" [-2.11042432, 2.38249017],\n",
" [ 2.38249803, -2.1105769 ]]), array([[ 0.68033473, -2.55026254, -2.63855001],\n",
" [-0.79177884, 2.68207786, 2.59393157]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168d9bdd8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.03154258548825048}\n",
"[[ 0.01070599 0.98053425 0.98054138 0.02528557]\n",
" [ 0.98929401 0.01946575 0.01945862 0.97471443]]\n",
"[array([[ 2.42644979, -1.97438771],\n",
" [-1.97687282, 2.42683032],\n",
" [ 1.25642219, 1.25681975]]), array([[-2.50547448, -2.4802892 , 1.03686812],\n",
" [ 2.60455426, 2.62973858, -1.08774409]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168b591d0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031525533033675182}\n",
"[[ 0.01074898 0.98057629 0.98056179 0.02524762]\n",
" [ 0.98925102 0.01942371 0.01943821 0.97475238]]\n",
"[array([[ 1.97510636, -2.42520404],\n",
" [-1.25432208, -1.25347711],\n",
" [-2.42596987, 1.98011715]]), array([[ 2.6373461 , -1.08073471, 2.5626286 ],\n",
" [-2.47595591, 1.02462783, -2.55069231]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168b595c0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031683047301714236}\n",
"[[ 0.01018743 0.98029666 0.98032557 0.02578303]\n",
" [ 0.98981257 0.01970334 0.01967443 0.97421697]]\n",
"[array([[-2.43573983, 1.93739017],\n",
" [ 1.94743329, -2.43717401],\n",
" [ 1.31728188, 1.31872773]]), array([[ 2.62528113, 2.58070129, 1.19489233],\n",
" [-2.45354582, -2.49815408, -1.102795 ]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168e1c710>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.029568589776941649}\n",
"[[ 0.01511589 0.98320551 0.98320552 0.01904326]\n",
" [ 0.98488411 0.01679449 0.01679448 0.98095674]]\n",
"[array([[-1.68718666, -1.68717444],\n",
" [ 1.83309543, 1.83310216],\n",
" [ 2.30099652, 2.30099339]]), array([[-1.62268664, 1.73477196, -2.79082854],\n",
" [ 1.45111486, -1.79528538, 2.86262592]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168d4edd8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.029539589789047232}\n",
"[[ 0.01679547 0.98104616 0.98492497 0.01677683]\n",
" [ 0.98320453 0.01895384 0.01507503 0.98322317]]\n",
"[array([[-1.79884923, 1.79823306],\n",
" [ 1.70777996, -1.71099719],\n",
" [-2.30993664, 2.31112542]]), array([[-1.80202919, 1.54409123, 3.00612475],\n",
" [ 1.65069614, -1.6289642 , -2.64412463]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168c15c50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.030909668962820103}\n",
"[[ 0.0182439 0.98169159 0.98170459 0.01828506]\n",
" [ 0.9817561 0.01830841 0.01829541 0.98171494]]\n",
"[array([[-2.29039539, 2.29288139],\n",
" [-2.27465684, 2.27075963],\n",
" [-0.32154128, 0.36092221]]), array([[-2.72086854, 2.66959205, 0.15999313],\n",
" [ 2.69089272, -2.65182681, -0.25901182]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168b15240>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.030990839306405914}\n",
"[[ 0.01813026 0.98143277 0.98141819 0.01828576]\n",
" [ 0.98186974 0.01856723 0.01858181 0.98171424]]\n",
"[array([[-2.29004145, 2.28505435],\n",
" [-2.28251732, 2.28899117],\n",
" [-0.12602234, -0.07785231]]), array([[ 2.6566979 , -2.65259994, -0.16570456],\n",
" [-2.7076025 , 2.70871881, 0.10802586]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168b9b710>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031172163993440746}\n",
"[[ 0.01323903 0.98116568 0.98116371 0.0228989 ]\n",
" [ 0.98676097 0.01883432 0.01883629 0.9771011 ]]\n",
"[array([[-2.10901333, 2.38250007],\n",
" [-0.95006233, -0.94990313],\n",
" [-2.38264612, 2.10972493]]), array([[-2.61208829, -0.73383215, 2.5480982 ],\n",
" [ 2.62017598, 0.74351283, -2.6841455 ]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168abd828>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.032040197611202727}\n",
"[[ 0.01980879 0.99050958 0.97326637 0.0205133 ]\n",
" [ 0.98019121 0.00949042 0.02673363 0.9794867 ]]\n",
"[array([[-2.46362625, -1.95001825],\n",
" [ 1.42435576, -1.41739194],\n",
" [ 1.80506112, 2.35899248]]), array([[-2.55030002, -1.29993761, -2.61261471],\n",
" [ 2.50032809, 1.30450224, 2.46367636]])]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f5168cd7978>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'iterations': 1000, 'cost_function': 0.031513758450649069}\n",
"[[ 0.01084562 0.98057713 0.98059074 0.02515126]\n",
" [ 0.98915438 0.01942287 0.01940926 0.97484874]]\n",
"[array([[ 1.23841713, 1.2391942 ],\n",
" [-1.98703322, 2.42462157],\n",
" [ 2.42389936, -1.98229619]]), array([[ 0.94829548, -2.58994826, -2.57924959],\n",
" [-1.13555925, 2.52750395, 2.53819839]])]\n"
]
}
],
"source": [
"from mlp import MultiLayerPerceptron\n",
"import numpy as np\n",
"#mlp = MultiLayerPerceptron(L=1, n=[2, 1], g=[\"sigmoid\"], alpha=0.1)\n",
"\n",
"X = np.array([[0, 0],\n",
" [0, 1],\n",
" [1, 0],\n",
" [1, 1]])\n",
"\n",
"Y = np.array([[0, 1],\n",
" [1, 0],\n",
" [1, 0],\n",
" [0, 1]])\n",
"#Y = np.array([[0],\n",
"# [1],\n",
"# [1],\n",
"# [0]])\n",
"\n",
"for i in range(15):\n",
" mlp = MultiLayerPerceptron(L=2, n=[2, 3, 2], g=[\"tanh\", \"tanh\"], alpha=1, w_rand_factor=1)\n",
" mlp.use_regularization(lambd=0.01)\n",
" #mlp.use_rmsprop()\n",
" res = mlp.learning(X.T, Y.T, 4, max_iter=1000, plot=True)\n",
" print(res)\n",
" print(mlp.get_output())\n",
" print(mlp.get_weights())\n",
"#mlp.set_all_training_examples(X.T, Y.T, 4)\n",
"#mlp.prepare()\n",
"#print(mlp.propagate())\n",
"#for i in range(100):\n",
"# print(mlp.back_propagation())\n",
"# mlp.propagate()\n",
"#print(mlp.propagate())\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.06521739]\n",
" [ 0.02173913]\n",
" [ 0.89130435]\n",
" [ 0.02173913]]\n",
"1.0\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"a = np.ones((4,1))\n",
"a[0] = 3\n",
"a[2] = 41\n",
"res = np.zeros((4,1))\n",
"res = a / np.sum(a)\n",
"print(res)\n",
"print(np.sum(res))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.0048747400000000007"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.sum(np.array([ 0.00015156, 0.00015268, 0.00015293, 0.00015146, 0.0001536, 0.0001529,\n",
" 0.0001529, 0.0001523, 0.00014965, 0.0001527, 0.00015024, 0.00015229,\n",
" 0.00015458 ,0.00015043 ,0.00015286, 0.00015533, 0.00015488, 0.00015392,\n",
" 0.00015377 , 0.0001549 , 0.0001537 , 0.00015145 , 0.00014796 , 0.00014766,\n",
" 0.00014974 , 0.00015326 ,0.00014838, 0.00015275 , 0.00015331, 0.00015493,\n",
" 0.0001541 , 0.00015162]))"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1 -2 3 4]\n",
" [ 5 6 -7 8]]\n",
"[[1 0 3 4]\n",
" [5 6 0 8]]\n",
"[ 6 4 -4 12]\n",
"[ 6 4 -4 12]\n",
"n= False\n",
"[ True True True True]\n"
]
}
],
"source": [
"a=np.array([[1,-2,3,4],[5,6,-7,8]])\n",
"b = np.array(a)\n",
"a[:,1:].T\n",
"b\n",
"print(a)\n",
"print(np.maximum(a,0))\n",
"print(np.sum(a,axis=0))\n",
"s=np.sum(a,axis=0)\n",
"print(\"n=\",all_axis_equal(a))\n",
"a[a>0]=1\n",
"print(np.all(a,axis=0))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}