Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.02 KB | None | 0 0
  1. from math import cos, sin, exp, tanh
  2. from random import random
  3. from sampling import sampling
  4.  
  5.  
  6. F = lambda S: 1 / (1+exp(-S))
  7.  
  8. alpha = 0.1
  9. Emin = 0.003
  10. E = Emin + 1
  11. M = 150
  12. K = 6
  13. I = 10
  14. J = 3
  15.  
  16. sX = sampling(M)
  17. M *= 3
  18. sqx = sum([x**2 for x in sX[::3]]) ** 0.5
  19. sqy = sum([x**2 for x in sX[1::3]]) ** 0.5
  20. sqz = sum([x**2 for x in sX[2::3]]) ** 0.5
  21. for i in range(0, M, 3):
  22.     sX[i] /= sqx
  23.     sX[i+1] /= sqy
  24.     sX[i+2] /= sqz
  25.  
  26. Wki = [[random() for i in range(I)] for k in range(K)]
  27. Wij = [[random() for i in range(J)] for k in range(I)]
  28. Ti = [random() for i in range(I)]
  29. Tj = [random() for i in range(J)]
  30. itns = 0
  31.  
  32. while E > Emin:
  33.     X = sX[:K]
  34.     itns += 1
  35.     E = 0
  36.     for r in range(0, M-K, 3):
  37.         Yi = [F(sum([Wki[k][i] * X[r+k] for k in range(K)]) - Ti[i]) for i in range(I)]
  38.         Yj = [sum([Wij[i][j] * Yi[i] for i in range(I)]) - Tj[j] for j in range(J)]
  39.         X += list(map(abs, Yj))
  40.  
  41.         Ej = [Yj[j] - sX[r+K+j] for j in range(J)]
  42.         Wij = [[Wij[i][j] - alpha * Ej[j] * Yi[i] for j in range(J)] for i in range(I)]
  43.         Tj = [Tj[j] + alpha * Ej[j] for j in range(J)]
  44.  
  45.         Ei = [sum([Ej[j] * Yj[j]*(1-Yj[j]) * Wij[i][j] for j in range(J)]) for i in range(I)]
  46.         Wki = [[Wki[k][i] - alpha * Ei[i] * Yi[i]*(1-Yi[i]) * X[r+k] for i in range(I)] for k in range(K)]
  47.         Ti = [Ti[i] + alpha * Ei[i] * Yi[i]*(1-Yi[i]) for i in range(I)]
  48.  
  49.         E += sum([Ej[j] ** 2 for j in range(J)])
  50.     E /= 2
  51.     print(E, "\n")
  52.  
  53. pred = sX[:K]
  54. for r in range(0, M-K, 3):
  55.     Yi = [F(sum([Wki[k][i] * X[r+k] for k in range(K)]) - Ti[i]) for i in range(I)]
  56.     Yj = [sum([Wij[i][j] * Yi[i] for i in range(I)]) - Tj[j] for j in range(J)]
  57.     pred += list(map(abs, Yj))
  58.  
  59. for i in range(0, M, 3):
  60.     print(str(pred[i]*sqx).replace('.', ','))
  61. print("---------------------------\n"*3)
  62. for i in range(1, M, 3):
  63.     print(str(pred[i]*sqy).replace('.', ','))
  64. print("---------------------------\n"*3)
  65. for i in range(2, M, 3):
  66.     print(str(pred[i]*sqz).replace('.', ','))
  67.  
  68. print("\n", itns)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement