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)
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
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