遺伝的アルゴリズム GA アルゴリズムに基づいて BP ニューラル ネットワークを最適化 (Python コード実装)

I. 概要

    BP-GA アルゴリズムの設計: 遺伝的アルゴリズムに基づく BP ニューラル ネットワーク アルゴリズム (以下、BP-GA と呼びます) は、BP ニューラル ネットワークの学習プロセスにおいて重みとしきい値を染色体として記述し、適切な適応関数を選択します。 BP-GA アルゴリズムの利点は、通常の BP 学習アルゴリズムと比較して、非微分可能など、従来の方法では処理できないいくつかの例を処理できることです。特性関数 (伝達関数) または勾配情報なし 既存のノード このアルゴリズムには、染色体ビット列と重み値の間のエンコーディング マッピングと評価関数という 2 つの重要な問題が含まれます。

2. 走行結果

コードの一部:

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:
        行数 = txtData.readlines()
        行数の行: 
            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 範囲 (len(データセット)):
        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 = [] 
    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)
    データ_x3 を返す

def load_data_wrapper(filename): lineData = [] with open(filename) as txtData: Lines = txtData.readlines() 行ごとの行: 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 = [] インデックス用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() 行ごとの行: 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 = [] インデックス用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

フルコード: 返信キーワード

3. 参考文献

[1] Wang Chongjun、Yu Wendi、Chen Zhaoqian、Xie Junyuan. 遺伝的アルゴリズムに基づく BP ニューラル ネットワーク アルゴリズムとその応用 [J]. 南京大学ジャーナル: 自然科学版、2003、39(5):459-466

[2] Pan Hao、Wang Xiaoyong、Chen Qiong、Huang Shaoluan、遺伝的アルゴリズムに基づく BP ニューラル ネットワーク技術の応用 [J]、Computer Applications、2005、25(12): 2777-2779

4 番目、 Python コードの実装

おすすめ

転載: blog.csdn.net/weixin_61181717/article/details/127967695