def get_feature_deletion_results(Input_dimension ,Output_dimension ,array1,array2,mapping_scheme=1,max_value=0): batch_error = [] sample_size = Input_dimension/100 reduced_input_dim = Input_dimension/1.5 demo_operator = operator(input_dim=Input_dimension, output_dim=Output_dimension, mapping_scheme=mapping_scheme) demo_operator.mapping.bits = default_bits demo_operator.mapping.map = default_maps batch_inner_product1 = [] batch_inner_product2 = [] while Input_dimension >= reduced_input_dim: # print ("epoch1:::Input Dimenson::",Input_dimension) batch_feature_size = int(sample_size) batch_positions = get_adversarial_positions(demo_operator,batch_feature_size) Input_dimension-=batch_feature_size array1,array2 = demo_operator.batch_delete_feature(batch_positions,array1,array2) # print("batch feature deletion done....") # print("arr1:",array1) # print("arr2:",array2) inner_product1, inner_product2 = demo_operator.inner_product(array1, array2) error = abs(inner_product1-inner_product2) print ("inners products:",inner_product1,inner_product2) print("error:", error) batch_error.append(error) batch_inner_product1.append(inner_product1) batch_inner_product2.append(inner_product2) # print ("Mapping scheme :",mapping_scheme,"::") # print (demo_operator.get_feature_count()) return batch_error,batch_inner_product1,batch_inner_product2,array1,array2
def main(): input_size, output_size = 50000, 2000 demo_operator = operator(input_dim=input_size, output_dim=output_size) arr1 = np.random.randint(0, high=50, size=input_size) arr2 = np.random.randint(0, high=50, size=input_size) #print("Array1:", arr1) #print("Array2:", arr2) demo_operator.inner_product(arr1, arr2) arr1 = np.insert(arr1, 1, 2) arr2 = np.insert(arr2, 1, 3) demo_operator.insert_feature(1, arr1, arr2) demo_operator.inner_product(arr1, arr2) arr1 = np.delete(arr1, 0) arr2 = np.delete(arr2, 0) demo_operator.delete_feature(0, arr1, arr2) demo_operator.inner_product(arr1, arr2)
def batch_feature_deletion_error(Input_dim=500,Output_dim=30,rate=10,array1=[],array2=[],mapping_scheme=1,max_val=1): batch_error = [] sample_size = Input_dim/100 reduced_input_dim = Input_dim/4 demo_operator = operator(input_dim=Input_dim, output_dim=Output_dim, mapping_scheme=mapping_scheme) batch_inner_product1 = [] batch_inner_product2 = [] while Input_dim >= reduced_input_dim: print ("epoch1:::Input Dimenson::",Input_dim) batch_feature_size = int(sample_size) batch_positions = [] batch_value1 = [] batch_value2 = [] for i in range(batch_feature_size): batch_positions.append(Input_dim-1) batch_value1.append(random.randint(0,max_val)) batch_value2.append(random.randint(0,max_val)) Input_dim -= 1 array1,array2 = demo_operator.batch_delete_feature(batch_positions,array1,array2) # print("batch feature deletion done....") # print("arr1:",array1) # print("arr2:",array2) inner_product1, inner_product2 = demo_operator.inner_product(array1, array2) error = abs(inner_product1-inner_product2) print ("inners products:",inner_product1,inner_product2) print("error:", error) batch_error.append(error) batch_inner_product1.append(inner_product1) batch_inner_product2.append(inner_product2) return batch_error,batch_inner_product1,batch_inner_product2,array1,array2
def get_remap_results(Input_dimension, Output_dimension, array1, array2, mapping_scheme): batch_error = [] batch_time = [] sample_size = Input_dimension / 50 reduced_input_dim = int(Input_dimension * 2) demo_operator = operator(input_dim=Input_dimension, output_dim=Output_dimension, mapping_scheme=mapping_scheme) # demo_operator.mapping.bits = default_bits # demo_operator.mapping.map = default_maps batch_inner_product1 = [] batch_inner_product2 = [] while Input_dimension <= reduced_input_dim: # print ("epoch1:::Input Dimenson::",Input_dimension) batch_feature_size = int(sample_size) batch_positions = get_adversarial_positions(demo_operator, batch_feature_size) Input_dimension += batch_feature_size feature1 = np.random.normal(0, 1, size=batch_feature_size) feature2 = np.random.normal(0, 1, size=batch_feature_size) t1 = time.time() array1, array2 = demo_operator.batch_insert_feature( batch_positions, array1, array2, feature1, feature2) # print("batch feature deletion done....") # print("arr1:",array1) # print("arr2:",array2) fresh_operator = operator(input_dim=Input_dimension, output_dim=Output_dimension, mapping_scheme=mapping_scheme) inner_product1, inner_product2 = fresh_operator.inner_product( array1, array2) t2 = time.time() error = abs(inner_product1 - inner_product2) # print ("inners products:",inner_product1,inner_product2) # print("error:", error) batch_error.append(error) batch_time.append(t2 - t1) batch_inner_product1.append(inner_product1) batch_inner_product2.append(inner_product2) # print ("Mapping scheme :",mapping_scheme,"::") # print (demo_operator.get_feature_count()) return batch_error, batch_time, batch_inner_product1, batch_inner_product2, array1, array2
def get_inner_product_results(array1, array2, input_dimension, output_dimension): i = 10 avg_inner_product1, avg_inner_product2 = 0, 0 while i > 0: demo_operator = operator(input_dim=input_dimension, output_dim=output_dimension, mapping_scheme = 3) inner_product1, inner_product2 = demo_operator.inner_product(array1, array2) avg_inner_product1+=inner_product1 avg_inner_product2+=inner_product2 i-=1 avg_inner_product1/=10 avg_inner_product2/=10 return avg_inner_product1, avg_inner_product2
def sample_error(N, M): sample_size = 100 arr1 = np.random.randint(0, high=N * 2, size=N) arr2 = np.random.randint(0, high=N * 2, size=N) average_sample_error = 0 for i in range(sample_size): demo_operator = operator(N, M) inner_product1, inner_product2 = demo_operator.inner_product( arr1, arr2) average_sample_error += ((inner_product1 - inner_product2)**2) average_sample_error /= sample_size average_sample_error = average_sample_error**0.5 return average_sample_error