Cnn
Cnn
self.inp_cache = None
self.dW = None
self.dB = None
xp = self.pad(x)
oh, ow = self.out_size(H), self.out_size(W)
out = np.zeros((N, self.Cout, oh, ow))
self.inp_cache = x
for b in range(N):
for oc in range(self.Cout):
for i in range(oh):
for j in range(ow):
h_start = i * self.stride
w_start = j * self.stride
h_end = h_start + self.kernel_size
w_end = w_start + self.kernel_size
region = xp[b, :, h_start:h_end, w_start:w_end] # (N, IC, K, K)
out[b, oc, i, j] = np.sum(region * self.W[oc]) + self.B[oc].item()
return out
_, _, oh, ow = dout.shape
self.dW = np.zeros_like(self.W)
self.dB = np.zeros_like(self.B)
dxp = np.zeros_like(xp)
for b in range(N):
for oc in range(self.Cout):
for i in range(oh):
for j in range(ow):
h_start = i * self.stride
w_start = j * self.stride
h_end = h_start + self.kernel_size
w_end = w_start + self.kernel_size
dx = self.unpad(dxp)
return dx
x = df.iloc[:4500, 1:]
y = df.iloc[:4500, 0]
x = x.values.reshape(-1, 1, 28, 28)
y = one_hot(y, 10)
x.shape, y.shape
model = CNN()
model, tl, va = train(model, x[:3000], y[:3000], lr = 0.001, epochs=25)
visualize_results(tl, va)
evaluate(model, x[3000:4000], y[3000:4000])