Exemplo n.º 1
0
class ImageNetCatewisedTrainer(MiniBatchTrainer):
  def __init__(self, test_id, data_dir, data_provider, checkpoint_dir, train_range, test_range,
      test_freq, save_freq, batch_size, num_minibatch, image_size, image_color, learning_rate,
      init_model, num_caterange_list, adjust_freq = 100, factor = 1.0):
    # no meaning
    assert len(num_caterange_list) == len(num_minibatch) and num_caterange_list[-1] == 1000

    self.init_output = num_caterange_list[0]
    self.range_list = num_caterange_list[1:]
    self.train_minibatch_list  = num_minibatch[1:]

    fc = init_model[-2]
    fc['outputSize'] = self.init_output

    self.learning_rate = learning_rate[0]
    self.learning_rate_list = learning_rate[1:]

    MiniBatchTrainer.__init__(self, test_id, data_dir, data_provider, checkpoint_dir, train_range,
        test_range, test_freq, save_freq, batch_size, num_minibatch[0], image_size, image_color,
        self.learning_rate,  init_model = init_model)

  def init_data_provider(self):
    ''' we begin with 100 categories'''
    self.set_category_range(self.init_output)

  def set_category_range(self, r):
    dp = DataProvider.get_by_name(self.data_provider)
    self.train_dp = dp(self.data_dir, self.train_range, category_range = range(r))
    self.test_dp = dp(self.data_dir, self.test_range, category_range = range(r))


  def train(self):
    MiniBatchTrainer.train(self)

    for i, cate in enumerate(self.range_list):
      self.set_category_range(cate)
      self.num_batch = self.curr_epoch = self.curr_batch = 0
      self.curr_minibatch = 0
      self.num_minibatch = self.train_minibatch_list[i]

      model = load(self.checkpoint_file)
      layers = model['model_state']['layers']

      for l in layers:
        if l['type'] == 'fc':
          l['weight'] = None
          l['bias'] = None
          l['weightIncr'] = None
          l['biasIncr'] = None

      fc = layers[-2]
      fc['outputSize'] = cate

      self.learning_rate = self.learning_rate_list[i]
      self.net = FastNet(self.learning_rate, self.image_shape, self.n_out, init_model = model)

      self.net.clear_weight_incr()
      MiniBatchTrainer.train(self)
Exemplo n.º 2
0
class ImageNetCatewisedTrainer(MiniBatchTrainer):
  def _finish_init(self):
    assert len(self.num_caterange_list) == len(self.num_batch) and self.num_caterange_list[-1] == 1000
    self.num_batch_list  = self.num_batch[1:]
    self.num_batch = self.num_batch[0]

    init_output = self.num_caterange_list[0]
    self.num_caterange_list = self.num_caterange_list[1:]

    fc = self.init_model[-2]
    fc['outputSize'] = init_output

    self.learning_rate_list = self.learning_rate[1:]
    self.learning_rate = self.learning_rate[0]

    self.set_category_range(init_output)
    self.net = FastNet(self.learning_rate, self.image_shape, init_model = self.init_model)
    MiniBatchTrainer._finish_init(self)


  def set_category_range(self, r):
    dp = DataProvider.get_by_name(self.data_provider)
    self.train_dp = dp(self.data_dir, self.train_range, category_range = range(r))
    self.test_dp = dp(self.data_dir, self.test_range, category_range = range(r))


  def train(self):
    MiniBatchTrainer.train(self)

    for i, cate in enumerate(self.num_caterange_list):
      self.set_category_range(cate)
      self.curr_batch = self.curr_epoch = 0
      self.num_batch = self.num_batch_list[i]

      model = self.checkpoint_dumper.get_checkpoint()
      layers = model['model_state']['layers']

      fc = layers[-2]
      fc['weight'] = None
      fc['bias'] = None
      fc['weightIncr'] = None
      fc['biasIncr'] = None
      #for l in layers:
      #  if l['type'] == 'fc':
      #    l['weight'] = None
      #    l['bias'] = None
      #    l['weightIncr'] = None
      #    l['biasIncr'] = None

      #fc = layers[-2]
      fc['outputSize'] = cate

      self.learning_rate = self.learning_rate_list[i]
      self.net = FastNet(self.learning_rate, self.image_shape, init_model = model)

      self.net.clear_weight_incr()
      MiniBatchTrainer.train(self)
Exemplo n.º 3
0
class ImageNetCateGroupTrainer(MiniBatchTrainer):
  def __init__(self, test_id, data_dir, data_provider, checkpoint_dir, train_range, test_range,
      test_freq, save_freq, batch_size, num_minibatch, image_size, image_color, learning_rate,
      num_group_list, init_model, adjust_freq = 100, factor = 1.0):

    self.train_minibatch_list = num_minibatch[1:]
    self.num_group_list = num_group_list[1:]
    self.learning_rate_list = learning_rate[1:]

    layers = init_model
    fc = layers[-2]
    fc['outputSize'] = num_group_list[0]

    MiniBatchTrainer.__init__(self, test_id, data_dir, data_provider, checkpoint_dir, train_range, test_range,
        test_freq, save_freq, batch_size, num_minibatch[0], image_size, image_color, learning_rate[0], init_model = init_model)


  def set_num_group(self, n):
    dp = DataProvider.get_by_name(self.data_provider)
    self.train_dp = dp(self.data_dir, self.train_range, n)
    self.test_dp = dp(self.data_dir, self.test_range, n)

  def init_data_provider(self):
    self.set_num_group(self.n_out)

  def train(self):
    MiniBatchTrainer.train(self)

    for i, group in enumerate(self.num_group_list):
      self.set_num_group(group)
      self.num_batch = self.curr_epoch = self.curr_batch = 0
      self.curr_minibatch = 0
      self.num_minibatch = self.train_minibatch_list[i]

      model = load(self.checkpoint_file)
      layers = model['model_state']['layers']

      fc = layers[-2]
      fc['outputSize'] = group
      fc['weight'] = None
      fc['bias'] = None
      fc['weightIncr'] = None
      fc['biasIncr'] = None

      self.learning_rate = self.learning_rate_list[i]
      self.net = FastNet(self.learning_rate, self.image_shape, self.n_out, init_model = model)

      self.net.clear_weight_incr()
      MiniBatchTrainer.train(self)
Exemplo n.º 4
0
class ImageNetCateGroupTrainer(MiniBatchTrainer):
    def _finish_init(self):
        self.num_batch_list = self.num_batch[1:]
        self.num_batch = self.num_batch[0]
        self.learning_rate_list = self.learning_rate[1:]
        self.learning_rate = self.learning_rate[0]

        layers = self.init_model
        fc = layers[-2]
        fc['outputSize'] = self.num_group_list[0]
        self.num_group_list = self.num_group_list[1:]

        self.set_num_group(fc['outputSize'])
        self.net = FastNet(self.learning_rate,
                           self.image_shape,
                           init_model=self.init_model)
        MiniBatchTrainer._finish_init(self)

    def set_num_group(self, n):
        dp = DataProvider.get_by_name(self.data_provider)
        self.train_dp = dp(self.data_dir, self.train_range, n)
        self.test_dp = dp(self.data_dir, self.test_range, n)

    def train(self):
        MiniBatchTrainer.train(self)

        for i, group in enumerate(self.num_group_list):
            self.set_num_group(group)
            self.curr_batch = self.curr_epoch = 0
            self.num_batch = self.num_batch_list[i]

            model = self.checkpoint_dumper.get_checkpoint()
            layers = model['model_state']['layers']

            fc = layers[-2]
            fc['outputSize'] = group
            fc['weight'] = None
            fc['bias'] = None
            fc['weightIncr'] = None
            fc['biasIncr'] = None

            self.learning_rate = self.learning_rate_list[i]
            self.net = FastNet(self.learning_rate,
                               self.image_shape,
                               init_model=model)

            self.net.clear_weight_incr()
            MiniBatchTrainer.train(self)
Exemplo n.º 5
0
class ImageNetCateGroupTrainer(MiniBatchTrainer):
  def _finish_init(self):
    self.num_batch_list = self.num_batch[1:]
    self.num_batch = self.num_batch[0]
    self.learning_rate_list = self.learning_rate[1:]
    self.learning_rate = self.learning_rate[0]

    layers = self.init_model
    fc = layers[-2]
    fc['outputSize'] = self.num_group_list[0]
    self.num_group_list = self.num_group_list[1:]

    self.set_num_group(fc['outputSize'])
    self.net = FastNet(self.learning_rate, self.image_shape, init_model = self.init_model)
    MiniBatchTrainer._finish_init(self)

  def set_num_group(self, n):
    dp = DataProvider.get_by_name(self.data_provider)
    self.train_dp = dp(self.data_dir, self.train_range, n)
    self.test_dp = dp(self.data_dir, self.test_range, n)


  def train(self):
    MiniBatchTrainer.train(self)

    for i, group in enumerate(self.num_group_list):
      self.set_num_group(group)
      self.curr_batch = self.curr_epoch = 0
      self.num_batch = self.num_batch_list[i]

      model = self.checkpoint_dumper.get_checkpoint()
      layers = model['model_state']['layers']

      fc = layers[-2]
      fc['outputSize'] = group
      fc['weight'] = None
      fc['bias'] = None
      fc['weightIncr'] = None
      fc['biasIncr'] = None

      self.learning_rate = self.learning_rate_list[i]
      self.net = FastNet(self.learning_rate, self.image_shape, init_model = model)

      self.net.clear_weight_incr()
      MiniBatchTrainer.train(self)
Exemplo n.º 6
0
class ImageNetCatewisedTrainer(MiniBatchTrainer):
    def _finish_init(self):
        assert len(self.num_caterange_list) == len(
            self.num_batch) and self.num_caterange_list[-1] == 1000
        self.num_batch_list = self.num_batch[1:]
        self.num_batch = self.num_batch[0]

        init_output = self.num_caterange_list[0]
        self.num_caterange_list = self.num_caterange_list[1:]

        fc = self.init_model[-2]
        fc['outputSize'] = init_output

        self.learning_rate_list = self.learning_rate[1:]
        self.learning_rate = self.learning_rate[0]

        self.set_category_range(init_output)
        self.net = FastNet(self.learning_rate,
                           self.image_shape,
                           init_model=self.init_model)
        MiniBatchTrainer._finish_init(self)

    def set_category_range(self, r):
        dp = DataProvider.get_by_name(self.data_provider)
        self.train_dp = dp(self.data_dir,
                           self.train_range,
                           category_range=range(r))
        self.test_dp = dp(self.data_dir,
                          self.test_range,
                          category_range=range(r))

    def train(self):
        MiniBatchTrainer.train(self)

        for i, cate in enumerate(self.num_caterange_list):
            self.set_category_range(cate)
            self.curr_batch = self.curr_epoch = 0
            self.num_batch = self.num_batch_list[i]

            model = self.checkpoint_dumper.get_checkpoint()
            layers = model['model_state']['layers']

            fc = layers[-2]
            fc['weight'] = None
            fc['bias'] = None
            fc['weightIncr'] = None
            fc['biasIncr'] = None
            #for l in layers:
            #  if l['type'] == 'fc':
            #    l['weight'] = None
            #    l['bias'] = None
            #    l['weightIncr'] = None
            #    l['biasIncr'] = None

            #fc = layers[-2]
            fc['outputSize'] = cate

            self.learning_rate = self.learning_rate_list[i]
            self.net = FastNet(self.learning_rate,
                               self.image_shape,
                               init_model=model)

            self.net.clear_weight_incr()
            MiniBatchTrainer.train(self)