Don't learn here. All code is implementing based on Noob Imagination and poor understanding of Articles.
import mpmath as mpMath mpMath.mp.dps = 5 class Neuron: def __init__(self,W): # Weight is an vector. self.W = W self.B = np.random.uniform(-1, 1) def forward(self,X): self.wX = X.dot(self.W) self.f_out = self.wX + self.B return self.f_out def tanh(self): self.out_tanh = mpMath.tanh(self.f_out) return self.out_tanh def derv(self,w_index,step_v,X): u = self.W.copy() print(f'Printing old Weight \n{self.W[w_index]}') u[w_index] += step_v print(f'Printing update weight \n {u[w_index]}') _d = (self.f_out - X.dot(u))/step_v return _d neuron = Neuron( np.random.uniform(-1.,1.,size=(784,)).astype(np.float16))
print(neuron.forward(train_data[0])) print(neuron.derv(2,0.001,train_data[0]))
Slope when step is 0.00001
-707.2305512337132 Printing old Weight 0.496826171875 Printing update weight 0.496826171875 39243.93562717796
As you can see output below when I update weight 0.001 there is 951 slope and If I go too small slope is even large. I don't understand.
-5.366328888592351 Printing old Weight -0.47216796875 Printing update weight -0.47119140625 951.3314431337232
Turns out this noob brain of mine forgot to add bais.
_d = (self.f_out - (X.dot(u)+self.B))/step_v)
so moving on.
Below is the code snippet how I am finding out how my model is predicting.
def predict(self,X): self.inputL_out = self.inputL.forward(X) # print(f"Input Layer Output---> \n \t {self.inputL_out}") # self.inputL.display_output() for l in range(0,len(self.neuronsLayers)): if l == 0: self.neuronsLayers[l].forward(self.inputL_out) else: self.neuronsLayers[l].forward(self.neuronsLayers[l-1].f_out) print(f'Forward output of layer {l} is :--> {self.neuronsLayers[l].f_out}') # self.neuronsLayers[l].display_output1() if l == len(self.hidden_layer_dim_arr)-1: self.outL_f_out = self.outL.forward(self.neuronsLayers[l].f_out) print(f'output of outL \n \t{self.outL_f_out}') print("Predicting--->") max_index = np.argmax(self.outL_f_out) print(f"index of max confidente {max_index} and probability is {self.outL_f_out[max_index]}")
So, My last layer have 10 neurons. each index represent each digit.
like index 2 represent 2.
Now I am stuck on another bug.
I works drev method works for 0.001 but it is 0.0 when I change setup to 0.0001.
I think I should learn basic Numpy and Python. But I will not it is fun doing things this way. Getting stuck on silly bugs.
Top comments (0)