def __init__(self, args, classes, layers, nodes, channels, keep_prob, drop_path_keep_prob, use_aux_head, steps, arch): super(NASNetworkImageNet, self).__init__() self.args = args self.search_space = args.search_space self.classes = classes self.layers = layers self.nodes = nodes self.channels = channels self.keep_prob = keep_prob self.drop_path_keep_prob = drop_path_keep_prob self.use_aux_head = use_aux_head self.steps = steps arch = list(map(int, arch.strip().split())) self.conv_arch = arch[:4 * self.nodes] self.reduc_arch = arch[4 * self.nodes:] self.pool_layers = [self.layers, 2 * self.layers + 1] self.layers = self.layers * 3 if self.use_aux_head: self.aux_head_index = self.pool_layers[-1] channels = self.channels self.stem0 = nn.Sequential( nn.Conv2d(3, channels // 2, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels // 2), nn.ReLU(inplace=True), nn.Conv2d(channels // 2, channels, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels), ) self.stem1 = nn.Sequential( nn.ReLU(inplace=True), nn.Conv2d(channels, channels, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels), ) outs = [[56, 56, channels], [28, 28, channels]] channels = self.channels self.cells = nn.ModuleList() for i in range(self.layers + 2): if i not in self.pool_layers: cell = Cell(self.search_space, self.conv_arch, outs, channels, False, i, self.layers + 2, self.steps, self.drop_path_keep_prob) else: channels *= 2 cell = Cell(self.search_space, self.reduc_arch, outs, channels, True, i, self.layers + 2, self.steps, self.drop_path_keep_prob) self.cells.append(cell) outs = [outs[-1], cell.out_shape] if self.use_aux_head and i == self.aux_head_index: self.auxiliary_head = AuxHeadImageNet(outs[-1][-1], classes) self.global_pooling = nn.AdaptiveAvgPool2d(1) self.dropout = nn.Dropout(1 - self.keep_prob) self.classifier = nn.Linear(outs[-1][-1], classes) self.init_parameters()
def __init__(self, classes, layers, nodes, channels, keep_prob, drop_path_keep_prob, use_aux_head, steps): super(NASWSNetworkImageNet, self).__init__() self.classes = classes self.layers = layers self.nodes = nodes self.channels = channels self.keep_prob = keep_prob self.drop_path_keep_prob = drop_path_keep_prob self.use_aux_head = use_aux_head self.steps = steps self.pool_layers = [self.layers, 2 * self.layers + 1] self.total_layers = self.layers * 3 + 2 if self.use_aux_head: self.aux_head_index = self.pool_layers[-1] channels = self.channels self.stem0 = nn.Sequential( nn.Conv2d(3, channels // 2, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels // 2), nn.ReLU(inplace=False), nn.Conv2d(channels // 2, channels, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels // 2), ) self.stem1 = nn.Sequential( nn.ReLU(inplace=False), nn.Conv2d(channels, channels, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels), ) outs = [[112, 112, channels // 2], [56, 56, channels]] self.cells = nn.ModuleList() for i in range(self.total_layers): if i not in self.pool_layers: cell = Cell(outs, self.nodes, channels, False, i, self.total_layers, self.steps, self.drop_path_keep_prob) outs = [outs[-1], cell.out_shape] else: channels *= 2 cell = Cell(outs, self.nodes, channels, True, i, self.total_layers, self.steps, self.drop_path_keep_prob) outs = [outs[-1], cell.out_shape] self.cells.append(cell) if self.use_aux_head and i == self.aux_head_index: self.auxiliary_head = AuxHeadImageNet(outs[-1][-1], classes) self.global_pooling = nn.AdaptiveAvgPool2d(1) self.dropout = nn.Dropout(1 - self.keep_prob) self.classifier = nn.Linear(outs[-1][-1], classes) self.init_parameters()
def __init__(self, args, classes, layers, nodes, channels, keep_prob, drop_path_keep_prob, use_aux_head, steps, arch): super(NASNetworkImageNet, self).__init__() self.args = args self.classes = classes self.layers = layers self.nodes = nodes self.channels = channels self.keep_prob = keep_prob self.drop_path_keep_prob = drop_path_keep_prob self.use_aux_head = use_aux_head self.steps = steps try: arch = eval(arch) except: pass arch = arch[0] + arch[1] self.conv_arch = arch[:4 * self.nodes] self.reduc_arch = arch[4 * self.nodes:] self.pool_layers = [self.layers, 2 * self.layers + 1] self.layers = self.layers * 3 self.multi_adds = 0 if self.use_aux_head: self.aux_head_index = self.pool_layers[-1] channels = self.channels self.stem0 = nn.Sequential( nn.Conv2d(3, channels // 2, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels // 2), nn.ReLU(inplace=True), nn.Conv2d(channels // 2, channels, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels), ) self.multi_adds += 3 * 3 * 3 * channels // 2 * 112 * 112 + 3 * 3 * channels // 2 * channels * 56 * 56 self.stem1 = nn.Sequential( nn.ReLU(inplace=True), nn.Conv2d(channels, channels, 3, stride=2, padding=1, bias=False), nn.BatchNorm2d(channels), ) self.multi_adds += 3 * 3 * channels * channels * 56 * 56 outs = [[224, 224, channels], [112, 112, channels]] print(outs) channels = self.channels self.cells = nn.ModuleList() for i in range(self.layers + 2): if i not in self.pool_layers: cell = Cell(self.conv_arch, outs, channels, False, i, self.layers + 2, self.steps, self.drop_path_keep_prob) else: channels *= 2 cell = Cell(self.reduc_arch, outs, channels, True, i, self.layers + 2, self.steps, self.drop_path_keep_prob) self.multi_adds += cell.multi_adds self.cells.append(cell) outs = [outs[-1], cell.out_shape] print(outs) if self.use_aux_head and i == self.aux_head_index: self.auxiliary_head = AuxHeadImageNet(outs[-1][-1], classes) self.global_pooling = nn.AdaptiveAvgPool2d(1) self.dropout = nn.Dropout(1 - self.keep_prob) self.classifier = nn.Linear(outs[-1][-1], classes) self.init_parameters()