def evaluateOneEpoch(inputCoor, inputGraph, inputLabel, para, sess, trainOperaion): test_loss = [] test_acc = [] test_predict = [] for i in range(len(inputCoor)): xTest, graphTest, labelTest = inputCoor[i], inputGraph[i], inputLabel[i] graphTest = graphTest.tocsr() labelBinarize = label_binarize(labelTest, classes=[i for i in range(para.outputClassN)]) test_batch_size = para.testBatchSize for testBatchID in range(len(labelTest) / test_batch_size): start = testBatchID * test_batch_size end = start + test_batch_size batchCoor, batchGraph, batchLabel = get_mini_batch(xTest, graphTest, labelBinarize, start, end) batchWeight = uniform_weight(batchLabel) batchGraph = batchGraph.todense() feed_dict = {trainOperaion['inputPC']: batchCoor, trainOperaion['inputGraph']: batchGraph, trainOperaion['outputLabel']: batchLabel, trainOperaion['weights']: batchWeight, trainOperaion['keep_prob_1']: 1.0, trainOperaion['keep_prob_2']: 1.0} predict, loss_test, acc_test = sess.run( [trainOperaion['predictLabels'], trainOperaion['loss'], trainOperaion['acc']], feed_dict=feed_dict) test_loss.append(loss_test) test_acc.append(acc_test) test_predict.append(predict) test_average_loss = np.mean(test_loss) test_average_acc = np.mean(test_acc) return test_average_loss, test_average_acc, test_predict
def train(self, X_train, Y_train, X_valid, Y_valid, iterations=20): """Dictionary is fed in the graph to train the model""" print("Training model.") for i in range(iterations): batch_X, batch_Y = get_mini_batch(X_train, Y_train) acc, loss = self.sess.run([self.accuracy, self.loss], feed_dict={ self.X: batch_X, self.Y_: batch_Y, self.step: i, self.pkeep: 1.0 }) print("Step: {}, Accuracy: {}, Loss: {}".format(i, acc, loss)) self.graph_plot.addData((i, acc), 0) self.sess.run(self.minimize, feed_dict={ self.X: batch_X, self.Y_: batch_Y, self.step: i, self.pkeep: pkeep }) # save model and check for accuracy on the validation set every 100 steps if i % 100 == 0: if len(X_valid) != 0: acc = self.check_accuracy(X_valid, Y_valid) print("\nTesting data, Accuracy: {}\n".format(acc)) self.graph_plot.addData((i, acc), 1) self.graph_plot.plot() if i % 1000 == 0: self.save_model(i)
def trainOneEpoch(inputCoor, inputGraph, inputLabel, para, sess, trainOperaion, weight_dict, learningRate): dataChunkLoss = [] dataChunkAcc = [] dataChunkRegLoss = [] for i in range(len(inputCoor)): xTrain_1, graphTrain_1, labelTrain_1 = inputCoor[i], inputGraph[i], inputLabel[i] graphTrain_1 = graphTrain_1.tocsr() labelBinarize = label_binarize(labelTrain_1, classes=[j for j in range(para.outputClassN)]) xTrain, graphTrain, labelTrain = shuffle(xTrain_1, graphTrain_1, labelBinarize) # labelBinarize = label_binarize(labelTrain, classes=[j for j in range(40)]) batch_loss = [] batch_acc = [] batch_reg = [] batchSize = para.batchSize for batchID in range(len(labelBinarize) / para.batchSize): start = batchID * batchSize end = start + batchSize batchCoor, batchGraph, batchLabel = get_mini_batch(xTrain, graphTrain, labelTrain, start, end) batchGraph = batchGraph.todense() batchCoor = add_noise(batchCoor, sigma=0.008, clip=0.02) if para.weighting_scheme == 'uniform': batchWeight = uniform_weight(batchLabel) elif para.weighting_scheme == 'weighted': batchWeight = weights_calculation(batchLabel, weight_dict) else: print 'please enter the valid weighting scheme' #print batchWeight feed_dict = {trainOperaion['inputPC']: batchCoor, trainOperaion['inputGraph']: batchGraph, trainOperaion['outputLabel']: batchLabel, trainOperaion['lr']: learningRate, trainOperaion['weights']: batchWeight, trainOperaion['keep_prob_1']: para.keep_prob_1, trainOperaion['keep_prob_2']: para.keep_prob_2} opt, loss_train, acc_train, loss_reg_train = sess.run( [trainOperaion['train'], trainOperaion['loss_total'], trainOperaion['acc'], trainOperaion['loss_reg']], feed_dict=feed_dict) #print('The loss loss_reg and acc for this batch is {},{} and {}'.format(loss_train, loss_reg_train, acc_train)) batch_loss.append(loss_train) batch_acc.append(acc_train) batch_reg.append(loss_reg_train) dataChunkLoss.append(np.mean(batch_loss)) dataChunkAcc.append(np.mean(batch_acc)) dataChunkRegLoss.append(np.mean(batch_reg)) train_average_loss = np.mean(dataChunkLoss) train_average_acc = np.mean(dataChunkAcc) loss_reg_average = np.mean(dataChunkRegLoss) return train_average_loss, train_average_acc, loss_reg_average
def evaluateOneEpoch(inputCoor, inputGraph, inputLabel, para, sess, trainOperaion): # Description: Performance on the test set data # Input: (1)inputCoor: input coordinates (B, N, 3) (2) inputGraph: input graph (B, N*N) (3) inputLabel: labels (B, 1) # (4) para: global Parameters (5) sess: Session (6) trainOperaion: placeholder dictionary # Return: average loss, acc, regularization loss for test set test_loss = [] test_acc = [] test_predict = [] for i in range(len(inputCoor)): xTest, graphTest, labelTest = inputCoor[i], inputGraph[i], inputLabel[i] graphTest = graphTest.tocsr() labelBinarize = label_binarize(labelTest, classes=[j for j in range(40)]) test_batch_size = para.testBatchSize for testBatchID in range(len(labelTest) / test_batch_size): start = testBatchID * test_batch_size end = start + test_batch_size batchCoor, batchGraph, batchLabel = get_mini_batch(xTest, graphTest, labelBinarize, start, end) batchWeight = uniform_weight(batchLabel) batchGraph = batchGraph.todense() batchIndexL1, centroid_coordinates = farthest_sampling_new(batchCoor, M=para.clusterNumberL1, k=para.nearestNeighborL1, batch_size=test_batch_size, nodes_n=para.pointNumber) batchMiddleGraph = middle_graph_generation(centroid_coordinates, batch_size = test_batch_size, M = para.clusterNumberL1) feed_dict = {trainOperaion['inputPC']: batchCoor, trainOperaion['inputGraph']: batchGraph, trainOperaion['outputLabel']: batchLabel, trainOperaion['weights']: batchWeight, trainOperaion['keep_prob_1']: 1.0, trainOperaion['keep_prob_2']: 1.0, trainOperaion['batch_index_l1']: batchIndexL1, trainOperaion['l2Graph']: batchMiddleGraph, trainOperaion['batch_size']: test_batch_size } predict, loss_test, acc_test = sess.run( [trainOperaion['predictLabels'], trainOperaion['loss'], trainOperaion['acc']], feed_dict=feed_dict) test_loss.append(loss_test) test_acc.append(acc_test) test_predict.append(predict) test_average_loss = np.mean(test_loss) test_average_acc = np.mean(test_acc) return test_average_loss, test_average_acc, test_predict
def evaluateOneEpoch(inputCoor, inputGraph, inputLabel, para, sess, trainOperaion): # Description: Performance on the test set data # Input: (1)inputCoor: input coordinates (B, N, 3) (2) inputGraph: input graph (B, N*N) (3) inputLabel: labels (B, 1) # (4) para: global Parameters (5) sess: Session (6) trainOperaion: placeholder dictionary # Return: average loss, acc, regularization loss for test set test_loss = [] test_acc = [] test_predict = [] for i in range(len(inputCoor)): xTest, graphTest, labelTest = inputCoor[i], inputGraph[i], inputLabel[i] graphTest = graphTest.tocsr() labelBinarize = label_binarize(labelTest, classes=[j for j in range(40)]) test_batch_size = para.testBatchSize for testBatchID in range(len(labelTest) / test_batch_size): start = testBatchID * test_batch_size end = start + test_batch_size batchCoor, batchGraph, batchLabel = get_mini_batch(xTest, graphTest, labelBinarize, start, end) batchWeight = uniform_weight(batchLabel) batchGraph = batchGraph.todense() # select the centroid points by farthest sampling and get the index of each centroid points n nearest neighbors batchIndexL1, centroid_coordinates = farthest_sampling(batchCoor, M=para.clusterNumberL1, k=para.nearestNeighborL1, batch_size=test_batch_size, nodes_n=para.pointNumber) batchMiddleGraph = middle_graph_generation(centroid_coordinates, batch_size = test_batch_size, M = para.clusterNumberL1) feed_dict = {trainOperaion['inputPC']: batchCoor, trainOperaion['inputGraph']: batchGraph, trainOperaion['outputLabel']: batchLabel, trainOperaion['weights']: batchWeight, trainOperaion['keep_prob_1']: 1.0, trainOperaion['keep_prob_2']: 1.0, trainOperaion['batch_index_l1']: batchIndexL1, trainOperaion['l2Graph']: batchMiddleGraph, trainOperaion['batch_size']: test_batch_size } predict, loss_test, acc_test = sess.run( [trainOperaion['predictLabels'], trainOperaion['loss'], trainOperaion['acc']], feed_dict=feed_dict) test_loss.append(loss_test) test_acc.append(acc_test) test_predict.append(predict) test_average_loss = np.mean(test_loss) test_average_acc = np.mean(test_acc) return test_average_loss, test_average_acc, test_predict
def trainOneEpoch(inputCoor, inputGraph, inputLabel, para, sess, trainOperaion, weight_dict, learningRate): # Description: training one epoch (two options to train the model, using weighted gradient descent or normal gradient descent) # Input: (1)inputCoor: input coordinates (B, N, 3) (2) inputGraph: input graph (B, N*N) (3) inputLabel: labels (B, 1) # (4) para: global Parameters (5) sess: Session (6) trainOperaion: placeholder dictionary # (7) weight_dict: weighting scheme used of weighted gradient descnet (8)learningRate: learning rate for current epoch # Return: average loss, acc, regularization loss for training set dataChunkLoss = [] dataChunkAcc = [] dataChunkRegLoss = [] for i in range(len(inputLabel)): xTrain_1, graphTrain_1, labelTrain_1 = inputCoor[i], inputGraph[ i], inputLabel[i] graphTrain_1 = graphTrain_1.tocsr() labelBinarize = label_binarize(labelTrain_1, classes=[j for j in range(40)]) xTrain, graphTrain, labelTrain = shuffle(xTrain_1, graphTrain_1, labelBinarize) batch_loss = [] batch_acc = [] batch_reg = [] batchSize = para.batchSize for batchID in range(len(labelBinarize) / para.batchSize): start = batchID * batchSize end = start + batchSize batchCoor, batchGraph, batchLabel = get_mini_batch( xTrain, graphTrain, labelTrain, start, end) batchGraph = batchGraph.todense() batchCoor = add_noise(batchCoor, sigma=0.008, clip=0.02) if para.weighting_scheme == 'uniform': batchWeight = uniform_weight(batchLabel) elif para.weighting_scheme == 'weighted': batchWeight = weights_calculation(batchLabel, weight_dict) else: print 'please enter a valid weighting scheme' batchIndexL1, centroid_coordinates = farthest_sampling_new( batchCoor, M=para.clusterNumberL1, k=para.nearestNeighborL1, batch_size=batchSize, nodes_n=para.pointNumber) batchMiddleGraph = middle_graph_generation(centroid_coordinates, batch_size=batchSize, M=para.clusterNumberL1) feed_dict = { trainOperaion['inputPC']: batchCoor, trainOperaion['inputGraph']: batchGraph, trainOperaion['outputLabel']: batchLabel, trainOperaion['lr']: learningRate, trainOperaion['weights']: batchWeight, trainOperaion['keep_prob_1']: para.keep_prob_1, trainOperaion['keep_prob_2']: para.keep_prob_2, trainOperaion['batch_index_l1']: batchIndexL1, trainOperaion['l2Graph']: batchMiddleGraph, trainOperaion['batch_size']: para.batchSize } opt, loss_train, acc_train, loss_reg_train = sess.run( [ trainOperaion['train'], trainOperaion['loss_total'], trainOperaion['acc'], trainOperaion['loss_reg'] ], feed_dict=feed_dict) batch_loss.append(loss_train) batch_acc.append(acc_train) batch_reg.append(loss_reg_train) #print "The loss, L2 loss and acc for this batch is {}, {} and {}".format(loss_train, loss_reg_train, acc_train) dataChunkLoss.append(np.mean(batch_loss)) dataChunkAcc.append(np.mean(batch_acc)) dataChunkRegLoss.append(np.mean(batch_reg)) train_average_loss = np.mean(dataChunkLoss) train_average_acc = np.mean(dataChunkAcc) loss_reg_average = np.mean(dataChunkRegLoss) return train_average_loss, train_average_acc, loss_reg_average
def trainOneEpoch(inputCoor, inputGraph, inputLabel, para, sess, trainOperaion, weight_dict, learningRate): # Description: training one epoch (two options to train the model, using weighted gradient descent or normal gradient descent) # Input: (1)inputCoor: input coordinates (B, N, 3) (2) inputGraph: input graph (B, N*N) (3) inputLabel: labels (B, 1) # (4) para: global Parameters (5) sess: Session (6) trainOperaion: placeholder dictionary # (7) weight_dict: weighting scheme used of weighted gradient descnet (8)learningRate: learning rate for current epoch # Return: average loss, acc, regularization loss for training set dataChunkLoss = [] dataChunkAcc = [] dataChunkRegLoss = [] for i in range(len(inputLabel)): xTrain_1, graphTrain_1, labelTrain_1 = inputCoor[i], inputGraph[i], inputLabel[i] graphTrain_1 = graphTrain_1.tocsr() labelBinarize = label_binarize(labelTrain_1, classes=[j for j in range(40)]) xTrain, graphTrain, labelTrain = shuffle(xTrain_1, graphTrain_1, labelBinarize) batch_loss = [] batch_acc = [] batch_reg = [] batchSize = para.batchSize for batchID in range(len(labelBinarize) / para.batchSize): start = batchID * batchSize end = start + batchSize batchCoor, batchGraph, batchLabel = get_mini_batch(xTrain, graphTrain, labelTrain, start, end) batchGraph = batchGraph.todense() batchCoor = add_noise(batchCoor, sigma=0.008, clip=0.02) if para.weighting_scheme == 'uniform': batchWeight = uniform_weight(batchLabel) elif para.weighting_scheme == 'weighted': batchWeight = weights_calculation(batchLabel, weight_dict) else: print 'please enter a valid weighting scheme' batchIndexL1, centroid_coordinates = farthest_sampling_new(batchCoor, M=para.clusterNumberL1, k=para.nearestNeighborL1, batch_size=batchSize, nodes_n=para.pointNumber) batchMiddleGraph = middle_graph_generation(centroid_coordinates, batch_size = batchSize, M = para.clusterNumberL1) feed_dict = {trainOperaion['inputPC']: batchCoor, trainOperaion['inputGraph']: batchGraph, trainOperaion['outputLabel']: batchLabel, trainOperaion['lr']: learningRate, trainOperaion['weights']: batchWeight, trainOperaion['keep_prob_1']: para.keep_prob_1, trainOperaion['keep_prob_2']: para.keep_prob_2, trainOperaion['batch_index_l1']: batchIndexL1, trainOperaion['l2Graph']: batchMiddleGraph, trainOperaion['batch_size']: para.batchSize} opt, loss_train, acc_train, loss_reg_train = sess.run( [trainOperaion['train'], trainOperaion['loss_total'], trainOperaion['acc'], trainOperaion['loss_reg']], feed_dict=feed_dict) batch_loss.append(loss_train) batch_acc.append(acc_train) batch_reg.append(loss_reg_train) #print "The loss, L2 loss and acc for this batch is {}, {} and {}".format(loss_train, loss_reg_train, acc_train) dataChunkLoss.append(np.mean(batch_loss)) dataChunkAcc.append(np.mean(batch_acc)) dataChunkRegLoss.append(np.mean(batch_reg)) train_average_loss = np.mean(dataChunkLoss) train_average_acc = np.mean(dataChunkAcc) loss_reg_average = np.mean(dataChunkRegLoss) return train_average_loss, train_average_acc, loss_reg_average