def test_addgrads(self): l1 = links.Linear(2, 3) l2 = links.Linear(3, 2) l3 = links.Linear(2, 3) s1 = sequential.Sequential(l1, l2) s2 = sequential.Sequential(s1, l3) l1.b.grad.fill(1) l2.W.grad.fill(2) l2.b.grad.fill(3) l3.W.grad.fill(4) l3.b.grad.fill(5) l1.W.grad.fill(6) self.l1.b.grad.fill(-1) self.l2.W.grad.fill(-2) self.l2.b.grad.fill(-3) self.l3.W.grad.fill(-4) self.l3.b.grad.fill(-5) self.l1.W.cleargrad() self.s2.addgrads(s2) numpy.testing.assert_array_equal(self.l1.b.grad, numpy.zeros((3,))) numpy.testing.assert_array_equal(self.l1.W.grad, l1.W.grad) numpy.testing.assert_array_equal(self.l2.W.grad, numpy.zeros((2, 3))) numpy.testing.assert_array_equal(self.l2.b.grad, numpy.zeros((2,))) numpy.testing.assert_array_equal(self.l3.W.grad, numpy.zeros((3, 2))) numpy.testing.assert_array_equal(self.l3.b.grad, numpy.zeros((3,)))
def setUp(self): self.l1 = links.Linear(None, 3) self.l2 = links.Linear(3, 2) self.l3 = links.Linear(2, 3) # s1: l1 -> l2 self.s1 = sequential.Sequential(self.l1) self.s1.append(self.l2) # s2: s1 (l1 -> l2) -> l3 self.s2 = sequential.Sequential(self.s1) self.s2.append(self.l3)
def test_call_with_multiple_inputs(self): model = sequential.Sequential( lambda x, y: (x * 2, y * 3, x + y), lambda x, y, z: x + y + z ) y = model(2, 3) self.assertEqual(y, 18)
def test_init(self): self.assertIs(self.s1[0], self.l1) self.assertEqual(self.l1.name, '0') self.assertIs(self.s2[0], self.s1) self.assertEqual(self.s1.name, '0') with self.assertRaises(ValueError): sequential.Sequential(0)
def test_extend(self): l1 = links.Linear(3, 2) l2 = links.Linear(2, 3) s3 = sequential.Sequential(l1, l2) self.s2.extend(s3) self.assertEqual(len(self.s2), 4) self.assertIs(self.s2[2], s3[0]) self.assertIs(self.s2[3], s3[1])
def test_iadd(self): l4 = links.Linear(3, 1) self.s2 += sequential.Sequential(l4) self.assertIs(self.s2[0], self.s1) self.assertIs(self.s2[1], self.l3) self.assertIs(self.s2[2], l4) with self.assertRaises(ValueError): self.s2 += 0
def test_copyparams(self): l1 = links.Linear(None, 3) l2 = links.Linear(3, 2) l3 = links.Linear(2, 3) s1 = sequential.Sequential(l1, l2) s2 = sequential.Sequential(s1, l3) l1.b.data.fill(0) l2.W.data.fill(1) l2.b.data.fill(2) l3.W.data.fill(3) l3.b.data.fill(4) self.s2.copyparams(s2) numpy.testing.assert_array_equal(self.l1.b.data, l1.b.data) numpy.testing.assert_array_equal(self.l2.W.data, l2.W.data) numpy.testing.assert_array_equal(self.l2.b.data, l2.b.data) numpy.testing.assert_array_equal(self.l3.W.data, l3.W.data) numpy.testing.assert_array_equal(self.l3.b.data, l3.b.data)
def test_call(self): l1 = mock.MagicMock() l2 = mock.MagicMock() l3 = mock.MagicMock() model = sequential.Sequential(l1, l2, l3) x = numpy.arange(2).reshape(1, 2).astype('f') y = model(x) l1.assert_called_once() l2.assert_called_once() l3.assert_called_once() y = self.s1(x) self.assertIs(y.creator.inputs[1].data, self.l2.W.data)
def test_add(self): l1 = links.Linear(3, 2) l2 = functions.relu other = sequential.Sequential(l1, l2) added = self.s2 + other self.assertEqual(len(added), 4) self.assertIs(added[0], self.s1) self.assertIs(added[1], self.l3) self.assertIs(added[2], l1) self.assertIs(added[3], l2) with self.assertRaises(ValueError): self.s2 + 0
def test_serialize(self): l1 = links.Linear(None, 1) l2 = links.Linear(None, 3) with l2.init_scope(): l2.x = variable.Parameter(0, 2) s1 = sequential.Sequential(l1, l2) mocks = {'0': mock.MagicMock(), '1': mock.MagicMock()} serializer = mock.MagicMock() serializer.__getitem__.side_effect = lambda k: mocks[k] serializer.return_value = None mocks['0'].return_value = None mocks['1'].return_value = None s1.serialize(serializer) self.assertEqual(serializer.call_count, 0) self.assertEqual(serializer.__getitem__.call_count, 2) serializer.__getitem__.assert_any_call('0') serializer.__getitem__.assert_any_call('1') mocks['0'].assert_any_call('W', None) mocks['0'].assert_any_call('b', l1.b.data) mocks['1'].assert_any_call('W', None) mocks['1'].assert_any_call('b', l2.b.data) mocks['1'].assert_any_call('x', l2.x.data)
def from_dict(dict_array): seq = sequential.Sequential() seq.from_dict(dict_array) return seq
def from_json(str): seq = sequential.Sequential() seq.from_json(str) return seq