aboutsummaryrefslogtreecommitdiff
path: root/backend/microservice
diff options
context:
space:
mode:
Diffstat (limited to 'backend/microservice')
-rw-r--r--backend/microservice/cuvanjemodela.ipynb168
-rw-r--r--backend/microservice/gradientDescent.ipynb355
2 files changed, 523 insertions, 0 deletions
diff --git a/backend/microservice/cuvanjemodela.ipynb b/backend/microservice/cuvanjemodela.ipynb
new file mode 100644
index 00000000..f24fcc41
--- /dev/null
+++ b/backend/microservice/cuvanjemodela.ipynb
@@ -0,0 +1,168 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Pre samog čuvanja modela, potrebno je kreirati i obučiti željeni model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "<keras.engine.functional.Functional object at 0x000001B0AA821550>\n"
+ ]
+ }
+ ],
+ "source": [
+ "import tensorflow as tf\n",
+ "\n",
+ "\n",
+ "datainput=tf.keras.Input(shape=(32,))\n",
+ "dataoutput=tf.keras.layers.Dense(1)(datainput)\n",
+ "\n",
+ "model=tf.keras.Model(datainput,dataoutput)\n",
+ "\n",
+ "model.compile(optimizer='adam',loss=\"mean_squared_error\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Nakon kreiranja, potrebno je izvršiti trening kreiranog modela"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Za trening će se koristiti nasumicno generisani skup brojeva"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "x=np.random.random((128,32))\n",
+ "y=np.random.random((128,1))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Nakon generisanja, moguće je izvršiti trening "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "4/4 [==============================] - 0s 3ms/step - loss: 0.6013\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "<keras.callbacks.History at 0x1b0a99bbf10>"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model.fit(x,y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Kreiranje h5 fajla se izvršava pozivanjem sledeceg koda:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "INFO:tensorflow:Assets written to: primer.onnx\\assets\n"
+ ]
+ }
+ ],
+ "source": [
+ "model.save(\"primer.h5\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Učitavanje postojećeg fajla može se izvršiti pozivanjem sledećeg koda:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "model2=tf.keras.models.load_model('primer.h5')"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "aa60dac3a75d8da79a838f0110309d30613c15866a87f648d4b1206eac7c83af"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.9.10 64-bit (windows store)",
+ "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.9.10"
+ },
+ "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/backend/microservice/gradientDescent.ipynb b/backend/microservice/gradientDescent.ipynb
new file mode 100644
index 00000000..930f0784
--- /dev/null
+++ b/backend/microservice/gradientDescent.ipynb
@@ -0,0 +1,355 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "gradientDescent.ipynb",
+ "provenance": [],
+ "collapsed_sections": []
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Gradijentni spust"
+ ],
+ "metadata": {
+ "id": "ktt1djHu0cNl"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "id": "ZQDusvq4z52M"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def gradient_descent(f, gradient, x0, alpha, eps, iters):\n",
+ " result = {}\n",
+ " \n",
+ " x = x0\n",
+ " for i in range(iters):\n",
+ " x_new = x - alpha * gradient(x)\n",
+ "\n",
+ " if abs(f(x_new) - f(x)) < eps:\n",
+ " result['converged'] = True\n",
+ " break\n",
+ "\n",
+ " x = x_new\n",
+ " else:\n",
+ " result['converged'] = False\n",
+ " \n",
+ "\n",
+ " result['num_iters'] = i\n",
+ " result['x'] = x_new\n",
+ " \n",
+ " return result"
+ ],
+ "metadata": {
+ "id": "SRYg9QtE0Dcf"
+ },
+ "execution_count": 1,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "x[0] = x\n",
+ "\n",
+ "x[1] = y"
+ ],
+ "metadata": {
+ "id": "XewBwwG71oqK"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def f(x):\n",
+ " return 0.5 * (x[0]**2 + 10*x[1]**2)"
+ ],
+ "metadata": {
+ "id": "Mbtzh4hx0DZf"
+ },
+ "execution_count": 3,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def gradient(x):\n",
+ " return np.array([x[0], 10*x[1]])"
+ ],
+ "metadata": {
+ "id": "vwmWa-qQ0DXD"
+ },
+ "execution_count": 4,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x0 = np.array([3,5])\n",
+ "eps = 0.00001\n",
+ "iters = 10\n",
+ "alpha = 0.1\n",
+ "\n",
+ "gradient_descent(f, gradient, x0, alpha, eps, iters)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "62OBHamq0DUI",
+ "outputId": "2fecd164-6feb-439c-8cc6-079085f20cba"
+ },
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "{'converged': False, 'num_iters': 9, 'x': array([1.04603532, 0. ])}"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Sada se posmatraju gradijent i inercija.\n",
+ "\n",
+ "d - za cuvanje prethodnih gradijenata\n",
+ "\n",
+ "beta*d - koliko znacaja se daje inerciji\n",
+ "\n",
+ "Prvo racuna gradijent pa se tek onda pomera po inerciji."
+ ],
+ "metadata": {
+ "id": "ul28Spkz3bY7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def momentum(f, gradient, x0, alpha, eps, iters, beta):\n",
+ " result = {}\n",
+ " \n",
+ " x = x0\n",
+ " d = 0\n",
+ " \n",
+ " for i in range(iters):\n",
+ " d = beta * d + alpha * gradient(x)\n",
+ " x_new = x - d\n",
+ " \n",
+ " if abs(f(x_new) - f(x)) < eps:\n",
+ " result['converged'] = True\n",
+ " break\n",
+ " x = x_new\n",
+ " else:\n",
+ " result['converged'] = False\n",
+ " result['num_iters'] = i\n",
+ " result['x'] = x_new\n",
+ " \n",
+ " return result "
+ ],
+ "metadata": {
+ "id": "SSzc08Rf0DRg"
+ },
+ "execution_count": 6,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "momentum(f, gradient, x0, alpha, eps, iters, beta=0.5)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "eEfVIiS86DjY",
+ "outputId": "312e9a41-ae2f-4182-85c5-3ea5bf855a05"
+ },
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "{'converged': False, 'num_iters': 9, 'x': array([0.19952216, 0.16601562])}"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Racuna gradijent u tacki nakon inercije. Prvo se pomera po inerciji pa tek onda rcauna gradijent."
+ ],
+ "metadata": {
+ "id": "n1bl2N5l8Cf4"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def nesterov(f, gradient, x0, alpha, eps, iters, beta):\n",
+ " result = {}\n",
+ " \n",
+ " x = x0\n",
+ " d = 0\n",
+ " \n",
+ " for i in range(iters):\n",
+ " d = beta * d + alpha * gradient(x - beta*d)\n",
+ " x_new = x - d\n",
+ " \n",
+ " if abs(f(x_new) - f(x)) < eps:\n",
+ " result['converged'] = True\n",
+ " break\n",
+ " x = x_new\n",
+ " else:\n",
+ " result['converged'] = False\n",
+ " \n",
+ " result['num_iters'] = i\n",
+ " result['x'] = x_new\n",
+ " \n",
+ " return result "
+ ],
+ "metadata": {
+ "id": "EVAuWKXH6JNi"
+ },
+ "execution_count": 8,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "nesterov(f, gradient, x0, alpha, eps, iters, beta=0.5)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Gldkp1lH6M1P",
+ "outputId": "74bfb0ca-63cc-44ee-a7b9-65400eca3e33"
+ },
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "{'converged': False, 'num_iters': 9, 'x': array([0.31974124, 0. ])}"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "ADAM (Adaptive Moment Estimation)\n",
+ "\n",
+ "Pokusava da aproksimira prvi i drugi momenat (statistika).\n",
+ "\n",
+ "E(X^k) - k-ti momenat\n",
+ "\n",
+ "m - ocena prvog momenta (akumulira gradijente, povecava korak), m je proporcionalno velicini koraka\n",
+ "\n",
+ "v - ocena drugog momenta (gleda promene gradijenta, kvadrat gradijenta), v je obrnuto proporcionalno velicini koraka\n"
+ ],
+ "metadata": {
+ "id": "uq3aN31j-pHD"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "def adam(f, gradient, x0, alpha, eps, iters, beta1, beta2, delta):\n",
+ " result = {}\n",
+ " \n",
+ " x = x0\n",
+ " m = 0\n",
+ " v = 0\n",
+ " \n",
+ " for i in range(1, iters+1):\n",
+ " grad = gradient(x)\n",
+ " m = beta1 * m + (1 - beta1) * grad\n",
+ " v = beta2 * v + (1 - beta2) * grad**2\n",
+ " \n",
+ " m_hat = m / (1 - beta1**i)\n",
+ " v_hat = v / (1 - beta2**i)\n",
+ " \n",
+ " x_new = x - alpha * m_hat / (np.sqrt(v_hat) + delta)\n",
+ " \n",
+ " if abs(f(x_new) - f(x)) < eps:\n",
+ " result['converged'] = True\n",
+ " break\n",
+ " \n",
+ " x = x_new\n",
+ " else:\n",
+ " result['converged'] = False\n",
+ " \n",
+ " result['num_iters'] = i\n",
+ " result['x'] = x_new\n",
+ " \n",
+ " return result "
+ ],
+ "metadata": {
+ "id": "mEe_3317-Ko2"
+ },
+ "execution_count": 10,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "adam(f, gradient, x0, alpha, eps, iters, 0.9, 0.999, 1e-7)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "hjCIJjRv-UkZ",
+ "outputId": "afdb0882-8934-44b7-c1a3-a4b8864a07ec"
+ },
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "{'converged': False, 'num_iters': 10, 'x': array([2.01418844, 4.00760162])}"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ]
+ }
+ ]
+} \ No newline at end of file