def run(iterations): nn = Network(10, 1, [ 10, 10, 10 ]) _input = [ 1 ] * 10 [ nn.train(_input, [1]) for i in range(0, int(iterations))]
def nn_init(sizes, batch_sizes, filters, learning_rate=0.1): # size = (SUB_IMG_LAYERS, SUB_IMG_HEIGHT // 4, SUB_IMG_WIDTH // 4) layers, height, width = sizes[NET_12] first_net = Network(learning_rate=learning_rate, input_shape=(batch_sizes[NET_12], layers, height, width), random_state=123 ) first_filter = filters[0] first_net.add_convolution_layer(filter_numbers=first_filter[0], filter_size=first_filter[1]) first_net.add_pooling_layer(pool_size=(2, 2)) first_net.add_dropout_layer(p=.5) first_net.add_fully_connected_layer(hidden_layer_size=500) first_net.add_dropout_layer(p=.5) first_net.add_softmax_layer(unit_numbers=2) first_net.initialize() # SUB_IMG_LAYERS, SUB_IMG_HEIGHT // 2, SUB_IMG_WIDTH // 2 layers, height, width = sizes[NET_24] second_net = Network(learning_rate=learning_rate, input_shape=(batch_sizes[NET_24], layers, height, width), random_state=123 ) second_filter = filters[1] second_net.add_convolution_layer(filter_numbers=second_filter[0], filter_size=second_filter[1]) second_net.add_pooling_layer(pool_size=(2, 2)) second_net.add_dropout_layer(p=.5) second_net.add_fully_connected_layer(hidden_layer_size=500) second_net.add_dropout_layer(p=.5) second_net.add_softmax_layer(unit_numbers=2) second_net.initialize() # SUB_IMG_LAYERS, SUB_IMG_HEIGHT, SUB_IMG_WIDTH layers, height, width = sizes[NET_48] third_net = Network(learning_rate=learning_rate, input_shape=(batch_sizes[NET_48], layers, height, width), random_state=123 ) third_filter = filters[2] third_net.add_convolution_layer(filter_numbers=third_filter[0], filter_size=third_filter[1]) third_net.add_pooling_layer(pool_size=(2, 2)) third_net.add_dropout_layer(p=.5) third_net.add_fully_connected_layer(hidden_layer_size=500) third_net.add_dropout_layer(p=.5) third_net.add_softmax_layer(unit_numbers=2) third_net.initialize() return [first_net, second_net, third_net]
import numpy as np from layers import SigmoidLayer, LogitLayer from nn import Network train_images = np.load('train_images.npy') train_labels = np.load('train_labels.npy') test_images = np.load('test_images.npy') test_labels = np.load('test_labels.npy') net = Network([SigmoidLayer(28 * 28, 200), LogitLayer(200, 10)]) net.train(train_images, train_labels, test_images, test_labels, 1000, 0.1, 100)
def benchmark(data_path, act_func, save_path): """ 测试在线性模型、单隐含层和双隐含层下的功耗模型 :param data_path: 数据路径 :param act_func: 激活函数 :param save_path: 存储路径 :return: """ if not os.path.exists(data_path + "/" + program + "/data"): os.makedirs(data_path + "/" + program + "/data") if not os.path.exists(save_path): os.makedirs(save_path) # mcpat.init(data_path,program) event, power = read_data(data_path, program) # 测试线性模型 file_name = save_path + "/linear/prediction_acc" if os.path.exists(file_name): os.remove(file_name) model = Network.linear_model_train(event, power, path=save_path, program_name=program) Network.graph(model(event), power, program_name=program, save_path=save_path + "/linear/" + program) # 测试单隐含层模型 file_name = save_path + "/onelayer/prediction_acc" if os.path.exists(file_name): os.remove(file_name) for node in range(4, 14): model = Network.onelayer_model(event, power, layer_node=node, act_func=act_func, path=save_path, program_name=program) Network.graph(model(event), power, program_name=program, save_path=save_path + "/onelayer/" + program + "_" + str(node)) with open(save_path + "/onelayer/best_acc", "w", encoding="utf-8") as f: f.write("BEST_ACC=%.4f node1=%d\n" % (Network.best_acc, Network.node1)) Network.best_acc, Network.node1 = 0, -1 # 测试双隐含层模型 file_name = save_path + "/twolayer/prediction_acc" if os.path.exists(file_name): os.remove(file_name) for node1 in range(4, 14): for node2 in range(4, 14): model = Network.twolayer_model(event, power, layer1_node=node1, layer2_node=node2, act_func=act_func, path=save_path, program_name=program) Network.graph(model(event), power, program_name=program, save_path=save_path + "/twolayer/" + program + "_" + str(node1) + "_" + str(node2)) with open(save_path + "/twolayer/best_acc", "w", encoding="utf-8") as f: f.write("BEST_ACC=%.4f node1=%d node2=%d\n" % (Network.best_acc, Network.node1, Network.node2)) Network.best_acc, Network.node1, Network.node2 = 0, -1, -1