def test(): nn_input_size = 3 # actual input length will be +1 due to bias fixed_point_10bit_precision = FixedPoint.FixedPointFormat(6,10) nn = NeuralNetwork.createDemoFullyConnectNN(fixed_point_10bit_precision, nn_input_size) ##nn = NeuralNetwork.createDebugNN(fixed_point_10bit_precision, nn_input_size) #DEBUG NN_on_CPU = NNs_on_CPU.initialize_NN_on_CPU(nn, fixed_point_10bit_precision) input_vectors = [] input_vectors.append([3]*nn_input_size) input_vectors.append([1]*nn_input_size) target_vectors = [] target_vectors.append([1, 0, 0]) target_vectors.append([1, 0, 0]) learning_rate = 0.02 mini_batch_size = 10 # --- CPU ---# NN_on_CPU.set_SGD_parameters(nn, mini_batch_size, learning_rate) #--- ReCAM ---# nn_weights_column = 0 nn_start_row = 0 NN_on_ReCAM = NNs_on_ReCAM.initialize_NN_on_ReCAM(nn_weights_column, nn_start_row) NN_on_ReCAM.set_SGD_parameters(mini_batch_size, learning_rate) NN_on_ReCAM.loadNNtoStorage(nn) for training_iteration in range(1000): ##input_vector = input_vectors[0] input_vector = input_vectors[training_iteration % 2] ##target_vector = target_vectors[0] target_vector = target_vectors[training_iteration % 2] #--- ReCAM ---# (ReCAM_activations, ReCAM_deltas) = NN_on_ReCAM.SGD_train(nn, fixed_point_10bit_precision, nn_input_size, input_vector, target_vector) #DEBUG ##NN_on_ReCAM.SGD_train(nn, fixed_point_10bit_precision, nn_input_size, input_vector, target_output) ##ReCAM_pds = NN_on_ReCAM.get_NN_matrices(nn, NN_on_ReCAM.BP_partial_derivatives_column, nn_start_row) #DEBUG ReCAM_weights = NN_on_ReCAM.get_NN_matrices(nn, nn_weights_column, nn_start_row) print("Finished ReCAM Execution", training_iteration) #--- CPU ---# (CPU_pds, CPU_activations, CPU_deltas) = NN_on_CPU.SGD_train(nn, input_vector, target_vector) #DEBUG ###NN_on_CPU.SGD_train(nn, input_vector, target_output) print("Finished CPU Execution", training_iteration) # --- Verify weights match ---# compare_activation_vectors(ReCAM_activations, CPU_activations, "activations") #DEBUG compare_activation_vectors(ReCAM_deltas, CPU_deltas, "deltas") #DEBUG #compare_NN_matrices(ReCAM_pds, CPU_pds, "partial derivatives") #DEBUG compare_NN_matrices(ReCAM_weights, nn.weightsMatrices, "weights") #DEBUG #storage.printArray() ################################# #### Execute #### ################################# #test()
def NN_on_ReCAM_test(): NN_Manager = initialize_NN_on_ReCAM() nn_input_size = 3 # actual input length will be +1 due to bias fixed_point_10bit = FixedPoint.FixedPointFormat(6,10) nn = NeuralNetwork.createDemoFullyConnectNN(fixed_point_10bit, nn_input_size) nn_weights_column = 0 nn_start_row = 0 NN_Manager.loadNNtoStorage(nn, nn_start_row, nn_weights_column) input_column = 1 FP_MUL_column = 2 FP_accumulation_column = 3 input_start_row = nn_start_row NN_Manager.loadInputToStorage(fixed_point_10bit, nn_input_size, input_column, input_start_row) target_output = [1,2] NN_Manager.loadTargetOutputToStorage(target_output, nn_start_row + nn.totalNumOfNetWeights, fixed_point_10bit, nn_weights_column) FP_output = NN_Manager.feedforward(nn, nn_weights_column, nn_start_row, input_column, FP_MUL_column, FP_accumulation_column) BP_output_column = FP_output[1] BP_partial_derivatives_column = FP_MUL_column activations_column = 1 if BP_output_column==3 else 3 BP_deltas_column = 4 BP_next_deltas_column = 5 NN_Manager.backPropagation(nn, nn_start_row, nn_weights_column, BP_output_column, BP_partial_derivatives_column, activations_column, BP_deltas_column, BP_next_deltas_column) ############################################################ ###### Execute ############################################################ #NN_on_ReCAM_test()