• 大小: 0.53M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: 其他  

资源简介

演化ANN.zip

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
import numpy as np
import copy

def randonmPro(pro): #以概率pro生成1,(1-pro)生成0
    pro *= 100
    num = np.random.randint(1101)
    if num <= pro:
        return 1
    else:
        return 0

def sigmoid(z): #激活函数
    return 1/(1+np.exp(-z))

def createTrainingData():    # 返回训练数据集
    data = []
    for i in range(32):
        L = list(str(bin(i))[2:].zfill(5))
        L = [ float(i) for i in L ]
        data.append(L)
    labels = [1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 0 1 1 0100110010110]
    return datalabels

def init(N):  #隐藏结点数N初始化
    connectedMatrix = np.zeros([N + 1 m + N] int) #连接矩阵
    #connectedMatrix = np.random.randint(0 2 (N + 1 m + N))
    derMatrix = np.zeros([N + 1 m + N + 1]) #偏导weight权值矩阵,初始化为0
    weightMatrix = np.random.uniform(-5 5 (N + 1 m + N + 1)) #初始化权值矩阵,利用(-55)的均匀分布
    for i in range(N + 1):
        for j in range(m + N):
            connectedMatrix[i][j] = randonmPro(0.5) #以0.5的概率生成连接矩阵
            if connectedMatrix[i][j]==0:
                weightMatrix[i][j+1]=0
            if j >= i + m:
                connectedMatrix[i][j] = 0
                weightMatrix[i][j + 1] = 0
    return connectedMatrixweightMatrixderMatrix

class Network: #神经网络类
    def __init__(self connectedMatrix weightMatrix derMatrix mN):
        self.connectedMatrix = connectedMatrix
        self.weightMatrix = weightMatrix
        self.derMatrix = derMatrix #偏导weight矩阵
        self.success = False  #标记网络是否成功
        self.m = m  #网络的输入结点个数
        self.N = N  #网络的隐藏结点个数
        self.a = [] #网络中每个结点的输出 a=g(z)
        self.z = [] #网络中每个结点的输入
        self.delta = [0]*(N+1) #L对每个结点(从隐藏结点到输出结点)输入的偏导 例如delta[N]表示L对z[m+N]的偏导
        self.E = 100 #E即算出的cost值,用作排序

    def clearderMatrix(self): #用于清空偏导矩阵,梯度下降时使用
        N = self.N
        self.derMatrix = np.zeros([N + 1 m + N + 1])

    def Pretreatment(selfinData): #预处理,讲delta清空,a,z均初始化为输出数据
        N = self.N
        self.a = []
        self.z = []
        self.delta = [0] * (N + 1)
        self.a.extend(inData)
        self.z.extend(inData)

    def forward(self): #前向传播,填充a和z
        N = self.N
        for i in range(N+1):
            s = -self.weightMatrix[i][0]
            for j in range(m+i):
                if self.connectedMatrix[i][j] == 1:
                    s += self.weightMatrix[i][j+1]*self.a[j]
            self.z.append(s)
            s = sigmoid(s)
            self.a.append(s)

    def derivatives(selflabel): #计算偏导,即BP(后向传播)算法,填充偏导weight矩阵和delta
        N = self.N
        out = self.a[m + N]
        self.delta[N] = (out - label) * out * (1-out)
        self.derMatrix[N][0] += self.delta[N]*(-1) #填充bias偏导
        for j in range(m+N):
            if self.connectedMatrix[N][j] == 1:
                self.derMatrix[N][j+1] += self.delta[N]*self.a[j]
        i = N-1  # i表示第i个隐藏节点
        while i >= 0: #从最后一个结点往前
            for j in range(i+1N+1):
                if self.connectedMatrix[j][m+i] == 1:
                    self.

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-07 22:08  演化ANN\
     文件      400868  2018-09-21 17:14  演化ANN\A new evolutionary system for evolving artificial neural networks.pdf
     文件      185245  2018-12-07 22:05  演化ANN\EP.docx
     文件       11513  2018-12-05 14:12  演化ANN\EP.py

评论

共有 条评论