def test_filter_size(self): ''' Get filter size. ''' clayer = ConvLayer(3, 64, [28, 14], 3) self.assertEqual(clayer.filter_size(2), 3 * 3 * 2, 'filter_size') self.assertEqual(clayer.total_filter_size(2), 3 * 3 * 3 * 64 * 2, 'total_filter_size') clayer = ConvLayer(3, 64, [28, 14], [3, 1]) self.assertEqual(clayer.filter_size(2), 3 * 1 * 2, 'filter_size') self.assertEqual(clayer.total_filter_size(2), 3 * 1 * 3 * 64 * 2, 'total_filter_size')
def _total_part_size(self, part, layerkey='PAR'): ''' Get the total partitioned data size. ''' layer = self.layer[layerkey] nifm = util.idivc(layer.nifm, part.size(pe.INPP)) * part.size(pe.INPP) nofm = util.idivc(layer.nofm, part.size(pe.OUTP)) * part.size(pe.OUTP) hofm = util.idivc(layer.hofm, part.dim(pe.OFMP).h) * part.dim(pe.OFMP).h wofm = util.idivc(layer.wofm, part.dim(pe.OFMP).w) * part.dim(pe.OFMP).w batch_size = util.idivc(self.batch_size, part.size(pe.BATP)) \ * part.size(pe.BATP) full_layer = ConvLayer(nifm, nofm, (hofm, wofm), (layer.hfil, layer.wfil), (layer.htrd, layer.wtrd)) filter_size = full_layer.total_filter_size() ifmap_size = full_layer.total_ifmap_size(batch_size) ofmap_size = full_layer.total_ofmap_size(batch_size) self.assertGreaterEqual(filter_size, layer.total_filter_size()) self.assertLess(filter_size, layer.total_filter_size() * 1.2 * 1.2) self.assertGreaterEqual(ofmap_size, layer.total_ofmap_size(self.batch_size)) self.assertLess( ofmap_size, layer.total_ofmap_size(self.batch_size) * 1.2 * 1.2 * 1.2) self.assertGreaterEqual(ifmap_size, layer.total_ifmap_size(self.batch_size)) return filter_size, ifmap_size, ofmap_size