栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数据挖掘课程作业打卡-多层神经网络BP算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据挖掘课程作业打卡-多层神经网络BP算法

一、实验目的

(1)掌握多层神经网络BP算法的基本原理。

(2)掌握多层神经网络BP算法的编程实现。

二、实验内容

1、代码题

编程实现BP神经网络的训练与测试。

python测试代码见附件:classify.py。

请编写nn_model函数、predict等函数及其调用的函数,使得测试代码classify.py可以顺利运行。

(将执行正确的python代码粘贴在此处)

import numpy as np

def initialize_parameters(n_x, n_h, n_y):

    W1 = np.random.randn(n_h, n_x) * 0.01

    b1 = np.zeros(shape=(n_h, 1))

    W2 = np.random.randn(n_y, n_h) * 0.01

    b2 = np.zeros(shape=(n_y, 1))

    return W1, b1, W2, b2



# 前向传播函数

def forward_propagation(X, W1, b1, W2, b2):

    Z1 = np.dot(W1, X) + b1

    A1 = np.tanh(Z1)

    Z2 = np.dot(W2, A1) + b2

    A2 = sigmoid(Z2)

    return Z1, A1, Z2, A2



def comput_cost(A2, Y):

    m = Y.shape[1]

    logprobs = np.multiply(np.log(A2), Y) + np.multiply((1 - Y), np.log(1 - A2))

    cost = -np.sum(logprobs) / m

    cost = float(cost)

    return cost



# 反向传播函数

def backward_propagaion(W1, b1, W2, b2, Z1, A1, Z2, A2, X, Y):

    m = X.shape[1]

    dZ2 = A2 - Y

    dW2 = (1 / m) * np.dot(dZ2, A1.T)

    db2 = (1 / m) * np.sum(dZ2, axis=1)

    dA1 = np.dot(W2.T, dZ2)

    dZ1 = np.multiply(dA1, 1 - np.power(A1, 2))

    dW1 = (1 / m) * np.dot(dZ1, X.T)

    db1 = (1 / m) * np.sum(dZ1, axis=1)

    return dW1, db1, dW2, db2



def nn_model(X, Y, n_h, num_iterations, print_cost=False):

    n_x = X.shape[0]

    n_y = Y.shape[0]

    W1, b1, W2, b2 = initialize_parameters(n_x, n_h, n_y)

    for i in range(num_iterations):

        Z1, A1, Z2, A2 = forward_propagation(X, W1, b1, W2, b2)

        cost = comput_cost(A2, Y)

        dW1, db1, dW2, db2 = backward_propagaion(W1, b1, W2, b2, Z1, A1, Z2, A2, X, Y)

        learing_rate = 0.5

        W1 = W1 - learing_rate * dW1

        b1 = b1 - learing_rate * db1

        W2 = W2 - learing_rate * dW2

        b2 = b2 - learing_rate * db2



        if print_cost:

            if i % 1000 == 0:

                print("iteration: ", i, "cost: " + str(cost))



    return W1, b1, W2, b2



def predict(W1, b1, W2, b2, X):

    Z1, A1, Z2, A2 = forward_propagation(X, W1, b1, W2, b2)

    predictions = np.round(A2)

    return predictions



def sigmoid(x):

    s = 1 / (1 + np.exp(-x))

    return s



def normalize(Samples):

    meanValue = np.mean(Samples, axis=0)

    stdValue = np.std(Samples, axis=0)

    Samples2 = (Samples - meanValue) / stdValue

    return Samples2

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号