def test_avg(t): out = minitorch.avgpool2d(t, (2, 2)) assert_close( out[0, 0, 0, 0], sum([t[0, 0, i, j] for i in range(2) for j in range(2)]) / 4.0) out = minitorch.avgpool2d(t, (2, 1)) assert_close( out[0, 0, 0, 0], sum([t[0, 0, i, j] for i in range(2) for j in range(1)]) / 2.0) out = minitorch.avgpool2d(t, (1, 2)) assert_close( out[0, 0, 0, 0], sum([t[0, 0, i, j] for i in range(1) for j in range(2)]) / 2.0) minitorch.grad_check(lambda t: minitorch.avgpool2d(t, (2, 2)), t)
def forward(self, x): self.mid = self.conv1.forward(x).relu() # print(self.mid.shape) self.out = self.conv2.forward(self.mid).relu() # print(self.out.shape) pool = minitorch.avgpool2d(self.out, (4, 4)) # print(pool.shape) pool = pool.view(BATCH, 392) # print(pool.shape) h = self.layer1.forward(pool).relu() # print(h.shape) if self.mode == "train": h = minitorch.dropout(h, 0.25) return minitorch.logsoftmax(self.layer2.forward(h), dim=1)