Beispiel #1
0
    def fprop(self, data, probs, train=TRAIN):
        input = data
        for i in range(len(self.layers)):
            l = self.layers[i]
            l.fprop(input, self.outputs[i], train)
            input = self.outputs[i]

        # probs.shape = self.outputs[-1].shape
        gpu_copy_to(self.outputs[-1], probs)
Beispiel #2
0
  def fprop(self, data, probs, train=TRAIN):
    input = data
    for i in range(len(self.layers)):
      l = self.layers[i]
      l.fprop(input, self.outputs[i], train)
      input = self.outputs[i]

    # probs.shape = self.outputs[-1].shape
    gpu_copy_to(self.outputs[-1], probs)
Beispiel #3
0
    def adjust_learning_rate(self, factor):
        factors = factor
        train_data = self.train_data
        test_data = self.test_data
        train_label = self.train_label
        test_label = self.test_label

        weights = []
        biases = []
        epsW = []
        epsB = []

        print 'store the weight, bias and learning rate'
        for layer in self.layers:
            if isinstance(layer, WeightedLayer):
                weight = gpuarray.empty_like(layer.weight)
                gpu_copy_to(layer.weight, weight)
                weights.append(weight)
                epsW.append(layer.epsW)

                bias = gpuarray.empty_like(layer.bias)
                gpu_copy_to(layer.bias, bias)
                biases.append(bias)
                epsB.append(layer.epsB)

        print 'find the best learning rate'
        print 'the factor list is ', factors

        self.prepare_for_train(train_data, train_label)
        self.fprop(self.data, self.output)
        self.bprop(self.data, self.label, self.output)

        self.get_batch_information()
        self.update()

        self.train_batch(test_data, test_label, TEST)
        cost, correct, numCase = self.get_batch_information()
        best = (correct, 1.0)
        origin = (correct, 1.0)
        print 'The normal update produce the correct', correct, 'number of case is', numCase

        for factor in factors:
            print 'Try the factor', factor
            i = 0
            for layer in self.layers:
                if isinstance(layer, WeightedLayer):
                    gpu_copy_to(weights[i], layer.weight)
                    gpu_copy_to(biases[i], layer.bias)
                    layer.epsW = epsW[i] * factor
                    layer.epsB = epsB[i] * factor
                    i += 1

            self.update()
            '''
      for layer in self.layers:
        if isinstance(layer, WeightedLayer):
          print 'epsW', layer.epsW, 'epsB', layer.epsB
          printMatrix(layer.weight, layer.name + 'weight')
          printMatrix(layer.bias, layer.name + 'bias')
      '''
            self.train_batch(test_data, test_label, TEST)
            cost, correct, numCase = self.get_batch_information()
            print 'Applying factor', factor, ', The correct is', correct, 'number of case is', numCase
            if correct > best[0]:
                best = (correct, factor)

        self.adjust_info.append((best[1], best[0], origin[0]))
        if best[0] / origin[0] < 1.025:
            best = origin
        factor = best[1]
        i = 0
        for layer in self.layers:
            if isinstance(layer, WeightedLayer):
                gpu_copy_to(weights[i], layer.weight)
                gpu_copy_to(biases[i], layer.bias)
                layer.epsW = epsW[i] * factor
                layer.epsB = epsB[i] * factor
                print 'Layer', layer.name
                print 'epsW is', layer.epsW, 'epsB is', layer.epsB
                i += 1
Beispiel #4
0
  def adjust_learning_rate(self, factor):
    factors = factor
    train_data = self.train_data
    test_data = self.test_data
    train_label = self.train_label
    test_label = self.test_label

    weights = []
    biases = []
    epsW = []
    epsB = []

    print 'store the weight, bias and learning rate'
    for layer in self.layers:
      if isinstance(layer, WeightedLayer):
        weight = gpuarray.empty_like(layer.weight)
        gpu_copy_to(layer.weight, weight)
        weights.append(weight)
        epsW.append(layer.epsW)

        bias = gpuarray.empty_like(layer.bias)
        gpu_copy_to(layer.bias, bias)
        biases.append(bias)
        epsB.append(layer.epsB)

    print 'find the best learning rate'
    print 'the factor list is ', factors

    self.prepare_for_train(train_data, train_label)
    self.fprop(self.data, self.output)
    self.bprop(self.data, self.label, self.output)

    self.get_batch_information()
    self.update()

    self.train_batch(test_data, test_label, TEST)
    cost, correct, numCase = self.get_batch_information()
    best = (correct , 1.0)
    origin = (correct, 1.0)
    print 'The normal update produce the correct', correct, 'number of case is', numCase

    for factor in factors:
      print 'Try the factor', factor
      i = 0
      for layer in self.layers:
        if isinstance(layer, WeightedLayer):
          gpu_copy_to(weights[i], layer.weight)
          gpu_copy_to(biases[i], layer.bias)
          layer.epsW = epsW[i] * factor
          layer.epsB = epsB[i] * factor
          i += 1

      self.update()
      '''
      for layer in self.layers:
        if isinstance(layer, WeightedLayer):
          print 'epsW', layer.epsW, 'epsB', layer.epsB
          printMatrix(layer.weight, layer.name + 'weight')
          printMatrix(layer.bias, layer.name + 'bias')
      '''
      self.train_batch(test_data, test_label, TEST)
      cost, correct, numCase = self.get_batch_information()
      print 'Applying factor', factor, ', The correct is', correct, 'number of case is', numCase
      if correct > best[0]:
        best = (correct, factor)

    self.adjust_info.append((best[1], best[0], origin[0]))
    if best[0] / origin[0] < 1.025:
      best = origin
    factor = best[1]
    i = 0
    for layer in self.layers:
      if isinstance(layer, WeightedLayer):
        gpu_copy_to(weights[i], layer.weight)
        gpu_copy_to(biases[i], layer.bias)
        layer.epsW = epsW[i] * factor
        layer.epsB = epsB[i] * factor
        print 'Layer', layer.name
        print 'epsW is', layer.epsW, 'epsB is', layer.epsB
        i += 1