| from layer import Layer |
| from tsensor import explain as exp |
| import numpy as np |
| import activation as act |
| import importlib |
| import weight_activation as wa |
|
|
| importlib.reload(act) |
| importlib.reload(wa) |
|
|
|
|
| class CapitalCostFCLayer(Layer): |
| def __init__(self, input_size, output_size, hour_day): |
| self.weights = np.full( |
| (input_size, output_size), 1.0 |
| ) |
| self.bias = np.full( |
| (1, output_size), 0.0 |
| ) |
| print(f"weight shape {self.weights.shape}") |
| self.second_input = None |
| self.day_amount = None |
| self.hour_day = hour_day |
| self.cost = None |
| self.time_usage = None |
| self.input = None |
|
|
| def annotate(self, cost_rate, day_amount, time_usage): |
| with exp() as c: |
| |
| output = 1/60 * (1/self.hour_day) * cost_rate * time_usage * (1/day_amount) @ self.weights + self.bias |
|
|
| |
|
|
| |
| def predict(self, cost_data, time_usage, day_amount): |
| element_input = np.multiply(cost_data, time_usage) |
| element_input = np.divide(element_input, day_amount) |
| output = (1 / 60) * (1 / self.hour_day) * np.dot( |
| element_input, self.weights |
| ) + self.bias |
| self.input = output |
| return act.leaky_relu(output) |
|
|
| |
| def forward_propagation(self, cost_data, time_usage, day_amount): |
| self.cost = cost_data |
| self.time_usage = time_usage |
| self.day_amount = day_amount |
| if np.all(cost_data == 0) and np.all(time_usage == 0): |
| self.output = np.zeros((1, 1)) |
| return self.output |
|
|
| element_input = np.multiply(self.cost, self.time_usage) |
| element_input = np.divide(element_input, self.day_amount) |
| self.output = (1 / 60) * (1 / self.hour_day) * np.dot( |
| element_input, self.weights |
| ) |
| self.output = np.nan_to_num(self.output) |
| return act.leaky_relu(self.output) |
|
|
| def predict(self, cost_data, time_usage, day_amount): |
| element_input = np.multiply(cost_data, time_usage) |
| element_input = np.divide(element_input, day_amount) |
| output = (1 / 60) * (1 / self.hour_day) * np.dot( |
| element_input, self.weights |
| ) |
| self.input = output |
| return act.leaky_relu(output) |
|
|
| |
| def backward_propagation(self, output_error, learning_rate): |
| |
| |
| input_error = np.dot(output_error, self.weights.T) |
| |
| |
| |
| |
|
|
| activation_input = self.input |
| activation_prime = act.leaky_relu_prime(activation_input) |
| input = self.time_usage * (1 / 60) * (1 / self.hour_day) |
| input = np.multiply(input, self.cost) |
| input = np.divide(input, self.day_amount) |
|
|
| weight_error = np.dot(output_error, input) |
| weight_error = np.multiply(weight_error, activation_prime) |
|
|
| row, col = self.weights.shape |
| weight_error = weight_error.reshape(row, col) |
|
|
| |
| bias_error = output_error * activation_prime |
| |
| |
| |
| |
|
|
| |
| self.weights -= learning_rate * weight_error |
| self.weights = wa.un_zero_weight(self.weights) |
| self.bias -= learning_rate * bias_error |
| |
| return input_error |
|
|
| def get_weight(self): |
| return self.weights |
|
|
| def get_bias(self): |
| return self.bias |
|
|