1. 程式人生 > >BP神經網路的Python實現

BP神經網路的Python實現

import numpy as np


class BPNetWork(object):
    """
    全連線神經網路,採用BP演算法訓練。
    """

    def __init__(self, layers, act_func='tanh'):
        """
        :param layers: 神經網路的結構
        :param act_func: 激勵函式
        輸入樣例:
        ann = BPNN((2, 3, 1))
        表示一個輸入層,一個隱含層,一個輸出層,輸入層有2個結點,
        隱含層有3個結點,輸出層有1個結點
        ann = BPNN((2, 3, 3, 1))
        表示一個輸入層,二個隱含層,一個輸出層,輸入層有2個結點,
        第一層隱含層有3個結點,第二層隱含層有3個結點,輸出層有1個結點
        """
# 初始化神經元的值 self.networks = [] # 初始化神經元權重 self.weights = [] for i in range(len(layers) - 1): weight = 2 * np.random.random((layers[i], layers[i + 1])) - 1 network = [1.0] * layers[i] self.networks.append(network) self.weights.append(weight) self.networks.append([1.0
] * layers[-1]) self.networks = np.array(self.networks) # 初始化神經元閾值 self.thresholds = [] for i in range(1, len(layers)): threshold = 2 * np.random.random(layers[i]) - 1 self.thresholds.append(threshold) # 選擇激勵函式和它的導函式 if act_func == 'tanh'
: self.act_func = self.tanh self.dact_func = self.dthanh else: self.act_func = self.sigmoid self.dact_func = self.dsigmoid def sigmoid(self, x): return 1 / (1 + np.exp(-x)) def dsigmoid(self, x): return self.sigmoid(x) * (1 - self.sigmoid(x)) def tanh(self, x): return np.tanh(x) def dthanh(self, x): return 1.0 - np.tanh(x) ** 2 def fit(self, train_x, train_y, epochs, learn_rate): ''' :param train_x: 訓練集X :param train_y: 訓練集Y :param epochs: 迭代次數 :param learn_rate: 學習率,步長 :return: None 擬合神經網路 ''' for i in range(epochs): i = np.random.randint(train_x.shape[0], high=None) self.update(train_x[i]) self.back_propagate(train_y[i], learn_rate) def predict(self, test_x): ''' :param test_x: 測試集合 :return: 預測值 ''' self.update(test_x) return self.networks[-1].copy() def update(self, inputs): ''' :param inputs: X的輸入值 :return: None 更新一次神經元的值 ''' self.networks[0] = inputs.copy() for i in range(len(self.weights)): count = np.dot(self.networks[i], self.weights[i]) - self.thresholds[i] self.networks[i + 1] = self.act_func(count) def back_propagate(self, y, rate): ''' :param y: target :param rate: 學習率 :return: None BP演算法,對神經網路的權值和閾值進行更新 ''' errors = y - self.networks[-1] gradients = [self.dact_func(self.networks[-1]) * errors] self.thresholds[-1] += (-1) * rate * gradients[-1] for i in range(len(self.weights) - 1, 0, -1): gradients.append(gradients[-1].dot(self.weights[i].T) * self.dact_func(self.networks[i])) self.thresholds[i - 1] += (-1) * rate * gradients[-1] gradients.reverse() for i in range(len(self.weights)): self.weights[i] += rate * self.networks[i].reshape((-1, 1)) * gradients[i]

相關推薦

BP神經網路Python實現異或問題

# -*- coding: UTF-8 -*- import matplotlib as mpl import numpy as np import matplotlib.pyplot as plt #BP神經網路實現異或問題 X=np.array([[1,0,0]

BP神經網路python簡單實現

BP神經網路的原理在網上有很詳細的說明,這裡就不打算細說,這篇文章主要簡單的方式設計及實現BP神經網路,並簡單測試下在恆等計算(編碼)作測試。  BP神經網路模型圖如下 BP神經網路基本思想 BP神經網路學習過程由資訊的下向傳遞和誤差的反向傳播兩個過程組成 正向傳遞:由

單隱層BP神經網路C++實現

    這幾天抽時間學習了一下很久之前就想學習的BP神經網路。通過閱讀西瓜書的神經網路部分的原理和參考了網上幾篇部落格,我自己用C++編寫、實現了一個單隱層BP神經網路。     簡單畫了個示意圖,好理解下面給出的公式:(注意:圖中省略了其他的節點之間的連

機器學習之BP神經網路演算法實現影象分類

BP 演算法是一個迭代演算法,它的基本思想為:(1) 先計算每一層的狀態和啟用值,直到最後一層(即訊號是前向傳播的);(2) 計算每一層的誤差,誤差的計算過程是從最後一層向前推進的(這就是反向傳播演算法名字的由來);(3) 更新引數(目標是誤差變小),迭代前面兩

Bp神經網路+C++實現

0 前言   神經網路在我印象中一直比較神祕,正好最近學習了神經網路,特別是對Bp神經網路有了比較深入的瞭解,因此,總結以下心得,希望對後來者有所幫助。   神經網路在機器學習中應用比較廣泛,比如函式逼近,模式識別,分類,資料壓縮,資料探勘等領域。神經

MATLAB神經網路程式設計(七)——BP神經網路實現

《MATLAB神經網路程式設計》 化學工業出版社 讀書筆記 第四章 前向型神經網路 4.3 BP傳播網路 本文是《MATLAB神經網路程式設計》書籍的閱讀筆記,其中涉及的原始碼、公式、原理都來自此書,若有不理解之處請參閱原書 本文講述BP網路常

神經網路python實現

本文主要內容是使用python實現神經網路。neural-networks-and-deep-learning神經網路的實現,雖然在原理上易懂,但是不夠模組化,layer、net、loss、optimi

Java實現BP神經網路實現對空氣質量的分析和評級

使用java實現BP神經網路進行迴歸分析,並利用訓練好的神經網路實現空氣質量的評級。 本實驗的工程專案和訓練資料集可訪問以下網址下載: 實驗描述: 對指定資料集進行迴歸分析,選擇適當的迴歸演算法,編寫程式實現,提交程式和結果報告。 資料集: AirQualityU

BP神經網路實現

一 BP神經網路的基本結構 在神經網路中,輸入層由資料集的某個向量x和一個偏置b構成,該向量需要乘以同緯度的權重向量w,累加得到下一層神經元的一個輸入標量,該標量乘以啟用函式得到下一層神經元的輸入。 該結構分為以下幾個部分。 二 BP神

BP神經網路 c++實現

#include <iostream> #include <cmath> #include "stdio.h" #include "stdlib.h" #include "time.h" using namespace std;

BP神經網路java實現,按照演算法步驟也參考網上相關資源寫的,若君有高見,非常歡迎指教

for(int i=0;i<hidN;i++){for(int j=0;j<=inN;j++){wyh[i][j]=Math.random()-0.5;//初始化權值和閾值//System.out.println(wyh[i][j]);}}//System.out.println();wyo=ne

Deep Learning 學習筆記(二):神經網路Python實現

多層神經網路的Python實現。 程式碼先貼上,程式設計的東西不解釋。 程式碼中出現的SupervisedLearningModel、NNLayer和SoftmaxRegression,請參考上一篇筆記:Deep Learning 學習筆記(一)——softmax

BP神經網路python程式碼詳細解答(來自原文翻譯)

翻譯如下 **         在 SCRATCH採用python 上實現一種神經網路 **         注: Scr

徑向基(RBF)神經網路python實現

from numpy import array, append, vstack, transpose, reshape, \                   dot, true_divide, mean, exp, sqrt, log, \                   loadtxt, savet

神經網路學習(3)————BP神經網路以及python實現

一、BP神經網路結構模型                BP演算法的基本思想是,學習過程由訊號的正向傳播和誤差的反向傳播倆個過程組成,輸入從輸入層輸入,經隱層處理以後,傳向輸出層。如果輸出層的實際輸出和期望輸出不符合

python神經網路實現BP神經網路

在這裡插入程式碼片# -*- coding: utf-8 -*- """ Created on Sun Oct 14 10:41:33 2018 @author: fang """ # -*- coding:utf-8 -*- #! python2 impo

BP神經網路實現分類問題(python

一些程式碼解釋 python版本:3.6 梯度更新 下面的程式碼 是對輸出層和隱層的梯度計算,具體可參考周志華機器學習103頁梯度更新公式 for i in range(self.outputn):#計算輸出層的梯度 y=

簡單BP神經網路python實現

貼上一個前兩天寫的不用框架實現隨機梯度下降的GitHub連結吧,具體說明可以看裡面的文件。============================18.6.3 update=======================================儘管神經網路已經有了很完備

機器學習與神經網路(四):BP神經網路的介紹和Python程式碼實現

前言:本篇博文主要介紹BP神經網路的相關知識,採用理論+程式碼實踐的方式,進行BP神經網路的學習。本文首先介紹BP神經網路的模型,然後介紹BP學習演算法,推導相關的數學公式,最後通過Python程式碼實現BP演算法,從而給讀者一個更加直觀的認識。 1.BP網路模型 為了將理

利用BP神經網路逼近函式——Python實現

  文章主要參考https://blog.csdn.net/john_bian/article/details/79503572,原文是matlab版本的實現。在此基礎上,利用Python實現BP網路對函式的逼近。對於BP神經網路的基本原理以及推倒,這裡就不再贅述,可以查閱相