Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.63 KB | None | 0 0
  1. import numpy as np
  2. import reservoir as r
  3. import equalization as e
  4. import matplotlib.pyplot as plt
  5.  
  6.  
  7. def train_lin_reg(states, targets, l_train, l_test, l_tot):
  8. #TRAIN_LIN_REG standard batch offline method for RC
  9. targets = np.array(targets)
  10. """
  11. print("targets")
  12. print(targets)
  13. """
  14. #compute readout weights
  15. X = states[:,0:l_train] #check indices
  16. R = X.dot(np.transpose(X))
  17. P = X.dot(np.transpose(targets[0:l_train]))
  18. W = np.transpose(P).dot(np.linalg.pinv(R)) #check order
  19. #W = W*2
  20. """
  21. X = states(:,1:l_train); % reservoir states for training
  22. R = X*X'; % + ridge*eye(size(X,1)); % correlation matrix
  23. P = X * targets(1:l_train)'; % cross-correlation vector
  24. W = P' * pinv(R); % readout weights
  25. """
  26. #evaluate system performance
  27. rcouts = W.dot(states) #reservoir outputs
  28. rcouts_mch = (np.round(rcouts/2+1.5)-1.5)*2 #test this
  29. #err_train = np.sum([1 if rcouts_mch[k] != targets[k] else 0 for k in range(0,l_train)])/l_train #check of course
  30. #err_test = np.sum([1 if rcouts_mch[k] != targets[k] else 0 for k in range(l_train,l_tot)])/l_test #check of course
  31. #print(len(targets[0:l_train]))
  32. #print(rcouts_mch[0:l_train])
  33. #print("len states:")
  34. #print(len(states))
  35.  
  36. #print(len(targets))
  37. #print(len(rcouts_mch))
  38. print("Rcouts")
  39. print(rcouts[0:20])
  40. print("rcout_mch")
  41. print(rcouts_mch[0:20])
  42. print("targets")
  43. print(targets[0:20])
  44. """
  45. print("JKLJLK")
  46. print(len(rcouts_mch))
  47. print(len(targets))
  48. print(targets)
  49. np.set_printoptions(threshold=np.nan)
  50. print("rcouts_mch")
  51. print(rcouts_mch)
  52. #print(rcouts_mch)
  53. print("rcouts")
  54. print(len(rcouts))
  55. """
  56. #print("W")
  57. #print(W)
  58.  
  59. err_train = np.sum(rcouts_mch[0:l_train] != targets[0:l_train])/l_train
  60. err_test = np.sum(rcouts_mch[l_train:l_tot] != targets[l_train:l_tot])/l_test
  61. return W, rcouts,rcouts_mch,err_train,err_test
  62.  
  63.  
  64. l_chauffe1 = 100
  65. l_chauffe2 = 200
  66. l_train = 1000
  67. l_test = 10000
  68. l_tot = l_train+l_test #a verifier
  69. N = 100
  70. spectralRadius = 300
  71. alpha = 0.5
  72. beta = 0.17 #jusqua 1.92 a priori
  73.  
  74. W = r.generateMatrix(N, spectralRadius)
  75. nbrIt = l_chauffe1+l_chauffe2+l_tot+1
  76. PHI = r.initializePHI(N)
  77. #allPHIs = np.array([[0.0]*len(PHI)]*nbrIt)
  78. allPHIs = np.array([[0.0]*nbrIt]*len(PHI))
  79. allPHIs[:,0] = PHI
  80.  
  81. """
  82. for i in range(0,l_chauffe1):
  83. allPHIs[:,i+1] = r.phiMap(allPHIs[:,i],W,beta,N)
  84. """
  85.  
  86. datatargets, datainputs = e.genNLchEQ(l_chauffe2+l_tot)
  87. print("datataa")
  88. print(len(datatargets))
  89. #print([(datatargets[k],datainputs[k]) for k in range(0,len(datatargets))])
  90. """
  91. plt.plot(datainputs[0:30])
  92. plt.plot(datatargets[0:30])
  93. plt.show()
  94. """
  95. print(datainputs)
  96. for i in range(l_chauffe1,l_chauffe1+l_chauffe2+l_tot):
  97. allPHIs[:,i+1] = r.phiMap(allPHIs[:,i],W,beta,N) + r.dataInput(alpha, datainputs[i-l_chauffe1],N)#+ 0.5*datainputs[i]#
  98.  
  99.  
  100. """
  101. for h in range(0,N):
  102. plt.plot([allPHIs[h,i] for i in range(l_chauffe1+l_chauffe2,l_chauffe1+l_chauffe2+100)])
  103.  
  104. plt.show()
  105. """
  106.  
  107. states = allPHIs[:,1+l_chauffe1+l_chauffe2:l_chauffe1+l_chauffe2+l_tot+1]
  108. print(len(states[0]))
  109. print("JKL")
  110. #print(allPHIs[:,l_tot])
  111. #print(l_tot)
  112. #print("dsjflksjf")
  113. #print(len(states[0]))
  114. W, rcouts,rcouts_mch,err_train,err_test = train_lin_reg(states, datatargets[l_chauffe2:], l_train, l_test, l_tot)
  115.  
  116. print("err_train = "+str(err_train))
  117. print("err_test = "+str(err_test))
  118.  
  119. """
  120. function [ results ] = train_lin_reg( states, targets, l_train, l_test, l_tot )
  121. %TRAIN_LIN_REG Standard batch offline method for RC
  122. % NOTE: ridge regression can be added with *ridge* term
  123. % Written by P. Antonik, Feb 2018
  124.  
  125. % compute readout weights
  126. X = states(:,1:l_train); % reservoir states for training
  127. R = X*X'; % + ridge*eye(size(X,1)); % correlation matrix
  128. P = X * targets(1:l_train)'; % cross-correlation vector
  129. W = P' * pinv(R); % readout weights
  130.  
  131. % evaluate system performance
  132. rcouts = W * states; % reservoir outputs
  133. rcouts_mch = (round(rcouts./2+1.5)-1.5)*2; % outputs matched to symbols
  134. err_train = sum(rcouts_mch(1:l_train)... % training error
  135. ~=targets(1:l_train))/l_train;
  136. err_test = sum(rcouts_mch(l_train+1:l_tot)... % test error
  137. ~=targets(l_train+1:l_tot))/l_test;
  138.  
  139. % save results
  140. results = struct('W', W, ...
  141. 'rcouts', rcouts, ...
  142. 'rcouts_mch', rcouts_mch, ...
  143. 'err_train', err_train, ...
  144. 'err_test', err_test);
  145.  
  146. end
  147. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement