示例#1
0
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()
示例#2
0
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()