Source code for algorithms.AGen.rls

import numpy as np
import scipy.linalg


[docs]class rls(object): """docstring for ClassName""" def __init__(self, lbd, theta, nn_dim, output_dim): ''' :param lbd: lambda :param theta: weights for theta :param nn_dim: network feature dimension :param output_dim: output dimension ''' self.lbd = lbd self.nn_dim = nn_dim self.y_dim = output_dim self.draw = [] self.theta = theta * np.ones([self.nn_dim, self.y_dim]) self.initialize()
[docs] def initialize(self): self.rls_state = [] self.F = 1000 * np.eye(self.nn_dim) self.F_M = self.F for i in range(self.y_dim - 1): self.F_M = scipy.linalg.block_diag(self.F_M, self.F)
# rls.update(hidden_vec, obs_Y[i,:])
[docs] def update(self, hidden_vec, obs_Y): ''' :param hidden_vec: hidden vector :param obs_Y: ground truth label :return: update the theta ''' hidden_vec = np.concatenate([hidden_vec, np.ones([1, 1])], axis=1) # print("original pred:") # print(hidden_vec @ self.theta) # print("ground truth:") # print(obs_Y) for j in range(self.y_dim): self.F = self.F_M[self.nn_dim * j:self.nn_dim * (j + 1), self.nn_dim * j:self.nn_dim * (j + 1)] # print(self.F) k = self.lbd + hidden_vec @ self.F @ hidden_vec.T # 65 * 1 k = self.F @ hidden_vec.T / k # print("rls debug info:") # print(k, hidden_vec @ k) # print("original theta:") # print(self.theta) # print("theta has updated:") # print(k @ (obs_Y[:, j] - hidden_vec @ self.theta[:, j])) self.theta[:, j] = self.theta[:, j] + k @ (obs_Y[:, j] - hidden_vec @ self.theta[:, j]) # print("updated theta:") # print(self.theta) # self.F = (self.F - k @ hidden_vec @ self.F) / self.lbd self.F_M[self.nn_dim * j:self.nn_dim * (j + 1), self.nn_dim * j:self.nn_dim * (j + 1)] = self.F pred = hidden_vec @ self.theta # print("updated pred:") # print(pred) self.rls_state.append(pred)
[docs] def predict(self, hidden_vec): ''' :param hidden_vec: hidden vector :return: predicted result using current theta ''' hidden_vec = np.concatenate([hidden_vec, np.ones([1, 1])], axis=1) # print("Roll out action:") # print(hidden_vec, self.theta) # print(hidden_vec @ self.theta) return hidden_vec @ self.theta