{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNY2Nwqu4OjVa3NACTemn6C"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"pAQeeZLy0RLy"},"outputs":[],"source":["import numpy as np;\n","import matplotlib.pyplot as plt\n","import math\n","\n","L=2\n","mi = 0.1\n","N= [2, 2, 1]\n","\n","w = [\n"," [],\n"," [[],[0,0,0], [0,0,0]],\n"," [[],[0,0,0]]\n","]\n","\n","s = [\n"," [],\n"," [None, 0, 0],\n"," [None, 0]\n","]\n","\n","x = [\n"," [],\n"," [-1,0,0],\n"," [-1,0,0]\n","]\n","\n","y = [\n"," [],\n"," [None, 0, 0],\n"," [None, 0]\n","]\n","\n","e = [\n"," [],\n"," [None, 0, 0],\n"," [None, 0]\n","]\n","\n","dlt = [\n"," [],\n"," [None, 0, 0],\n"," [None, 0]\n","]\n","\n","#funckja aktywacji \"sigmoida\"\n","def f(s):\n"," return 1/(1+math.exp(-s))\n","\n","#pochodna funckji aktywacji\n","def f_poch(s):\n"," return f(s)*(1-f(s))\n","\n","#losowanie wag\n","import random\n","def losuj_w():\n"," for k in range(1,L+1):\n"," for i in range(1, N[k]+1):\n"," for j in range(0,N[k-1]+1):\n"," w[k][i][j] = random.random()*2-1\n","\n","def licz_y(u):\n"," for k in range(1,L+1):\n"," for i in range(1, N[k-1]+1):\n"," if k==1:\n"," x[k][i] = u[i-1]\n"," else:\n"," x[k][i] = y[k-1][i]\n"," for i in range(1, N[k]+1):\n"," s[k][i] = 0\n"," for j in range(0,N[k-1]+1):\n"," s[k][i] += w[k][i][j]*x[k][j]\n"," y[k][i] = f(s[k][i])\n"," return y[L][1]\n","\n","def licz_e(d):\n"," for k in range(L,1-1,-1):\n"," for i in range(1, N[k]+1):\n"," if k==L:\n"," e[k][i] = d - y[k][i]\n"," else:\n"," e[k][i] = 0\n"," for j in range(1, N[k+1]+1):\n"," e[k][i] += dlt[k+1][j]*w[k+1][j][i]\n"," dlt[k][i] = e[k][i]*f_poch(s[k][i])\n","\n","#start\n","losuj_w()\n","n = 1\n","max = 10000\n","u = [\n"," [0,0],\n"," [1,0],\n"," [0,1],\n"," [1,1],\n"," [0,0],\n"," [1,0],\n"," [0,1],\n"," [1,1]\n","]\n","\n","d = [0,1,1,0,0,1,1,0]\n","\n","\n","while n < max:\n"," for nn in range(len(u)):\n"," n=n+1\n"," licz_y(u[nn])\n"," licz_e(d[nn])\n"," for k in range(L,1-1,-1):\n"," for i in range(1,N[k]+1):\n"," for j in range(0,N[k-1]+1):\n"," w[k][i][j] = w[k][i][j] + 2*mi*dlt[k][i]*x[k][j]\n","\n","\n","\n"]},{"cell_type":"code","source":["for nn in range(len(u)):\n"," yy = licz_y(u[nn])\n"," print(u[nn], d[nn], round(yy), yy)\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"zWmpXM8tGBjg","executionInfo":{"status":"ok","timestamp":1700486292260,"user_tz":-60,"elapsed":267,"user":{"displayName":"Marceli Nowak","userId":"06828965780756967134"}},"outputId":"ba7d8eef-d710-44d4-af46-ef1207fd7df1"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["[0, 0] 0 0 0.09258901151144866\n","[1, 0] 1 1 0.8853816259258563\n","[0, 1] 1 1 0.8850065354816076\n","[1, 1] 0 0 0.15353698679188638\n","[0, 0] 0 0 0.09258901151144866\n","[1, 0] 1 1 0.8853816259258563\n","[0, 1] 1 1 0.8850065354816076\n","[1, 1] 0 0 0.15353698679188638\n"]}]},{"cell_type":"code","source":[],"metadata":{"id":"-pRALl8z0vPB"},"execution_count":null,"outputs":[]}]}