数据挖掘课程作业打卡-多层神经网络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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值