Optimize BP neural network based on genetic algorithm GA algorithm (Python code implementation)

I. Overview

    Design of BP-GA algorithm: The BP neural network algorithm based on genetic algorithm (hereinafter referred to as BP-GA) is to describe the weight and threshold as chromosomes in the learning process of BP neural network, and select the appropriate adaptive function, and then carry out GA iterates until it converges in a certain sense. Compared with the ordinary BP learning algorithm, the advantage of the algorithm BP-GA is that it can handle some examples that cannot be handled by traditional methods, such as non-differentiable characteristic functions (transfer functions) or no gradient information Existing nodes. This algorithm involves two key issues, which are the encoding mapping between chromosome bit string and weight value and evaluation function.

2. Running results

Part of the code:

def load_data_wrapper(filename):
    lineData = []
    with open(filename) as txtData:
        lines = txtData.readlines()
        for line in lines:
            linedata = line.strip().split(',')
            lineData.append(linedata)
    return lineData
# 提出特征和标签,特征做输入,标签为输出
def splitData(dataset):
    Character= []
    Label = []
    for i in range(len(dataset)):
        Character.append([float(tk) for tk in dataset[i][1:-1]])
        Label.append(float(dataset[i][-1]))
    return Character, Label
#输入特征数据归一化
def max_min_norm_x(dataset):
    min_data = []
    for i in range(len(dataset)):
        min_data.append(min(dataset[i]))
    new_min = min(min_data)
    max_data = []
    for i in range(len(dataset)):
        max_data.append(max(dataset[i]))
    new_max = max(max_data)
    data = np.array(dataset)
    data_x =[]
    for x in np.nditer(data, op_flags=['readwrite']):
        #x[...] = 2 * (x -new_min)/(new_max-new_min)-1
        x[...] = (x - new_min) / (new_max - new_min)
        #print('x[...]:',x[...])
        data_x.append(x[...])
    data_x3 = []
    for index in range(0, len(data_x), 3):
        data_x3.append([data_x[index], data_x[index+1], data_x[index+2]])
    #print("data_x3:",data_x3)
    return data_x3
def load_data_wrapper(filename): 
    lineData = [] 
    with open(filename) as txtData: 
        lines = txtData.readlines() 
        for line in lines: 
            linedata = line.strip().split(',') 
            lineData.append(linedata) 
    return lineData 
#Propose features and labels, features are input, labels are output 
def splitData(dataset): 
    Character= [] 
    Label = [] 
    for i in range(len(dataset)): 
        Character.append([float(tk) for tk in dataset[i][1:-1]]) 
        Label.append(float(dataset[i][-1])) 
    return Character, Label 
#Input feature data normalization 
def max_min_norm_x(dataset): 
    min_data = [ ] 
    for i in range(len(dataset)):
        min_data.append(min(dataset[i]))
    new_min = min(min_data)
    max_data = []
    for i in range(len(dataset)):
        max_data.append(max(dataset[i]))
    new_max = max(max_data)
    data = np.array(dataset)
    data_x =[]
    for x in np.nditer(data, op_flags=['readwrite']):
        #x[...] = 2 * (x -new_min)/(new_max-new_min)-1
        x[...] = (x - new_min) / (new_max - new_min)
        #print('x[...]:',x[...])
        data_x.append(x[...])
    data_x3 = []
    for index in range(0, len(data_x), 3):
        data_x3.append([data_x[index], data_x[index+1], data_x[index+2]])
    #print("data_x3:",data_x3)
    return data_x3

def load_data_wrapper(filename): lineData = [] with open(filename) as txtData: lines = txtData.readlines() for line in lines: linedata = line.strip().split(',') lineData.append(linedata) return lineData #Propose features and labels, features are input, labels are output def splitData(dataset): Character= [] Label = [] for i in range(len(dataset)): Character.append([float(tk) for tk in dataset[i][1:-1]]) Label.append(float(dataset[i][-1])) return Character, Label #Input feature data normalization def max_min_norm_x(dataset): min_data = [ ] for i in range(len(dataset)): min_data.append(min(dataset[i])) new_min = min(min_data) max_data = [] for i in range(len(dataset)): max_data.append(max (dataset[i])) new_max = max(max_data) data = np. array(dataset) data_x = [] for x in np. nditer(data, op_flags=['readwrite']): #x[...] = 2 * (x-new_min)/(new_max-new_min)-1 x[...] = (x - new_min) / (new_max - new_min) #print('x[...]:',x[...]) data_x.append(x[...]) data_x3 = [] for index in range(0, len(data_x), 3): data_x3.append([data_x[index], data_x[index+1], data_x[index+2]]) #print("data_x3:",data_x3) return data_x3

def load_data_wrapper(filename): lineData = [] with open(filename) as txtData: lines = txtData.readlines() for line in lines: linedata = line.strip().split(',') lineData.append(linedata) return lineData #Propose features and labels, features are input, labels are output def splitData(dataset): Character= [] Label = [] for i in range(len(dataset)): Character.append([float(tk) for tk in dataset[i][1:-1]]) Label.append(float(dataset[i][-1])) return Character, Label #Input feature data normalization def max_min_norm_x(dataset): min_data = [ ] for i in range(len(dataset)): min_data.append(min(dataset[i])) new_min = min(min_data) max_data = [] for i in range(len(dataset)): max_data.append(max (dataset[i])) new_max = max(max_data) data = np. array(dataset) data_x = [] for x in np. nditer(data, op_flags=['readwrite']): #x[...] = 2 * (x-new_min)/(new_max-new_min)-1 x[...] = (x - new_min) / (new_max - new_min) #print('x[...]:',x[...]) data_x.append(x[...]) data_x3 = [] for index in range(0, len(data_x), 3): data_x3.append([data_x[index], data_x[index+1], data_x[index+2]]) #print("data_x3:",data_x3) return data_x3

Full Code: Reply Keyword

3. References

[1] Wang Chongjun, Yu Wendi, Chen Zhaoqian, Xie Junyuan. A BP neural network algorithm based on genetic algorithm and its application [J]. Journal of Nanjing University: Natural Science Edition, 2003,39(5):459-466

[2] Pan Hao, Wang Xiaoyong, Chen Qiong, Huang Shaoluan. Application of BP Neural Network Technology Based on Genetic Algorithm [J]. Computer Applications, 2005, 25(12): 2777-2779

Fourth,  Python code implementation

Guess you like

Origin blog.csdn.net/weixin_61181717/article/details/127967695