实验五、多层感知机的实现

第1关 实现全连接层的前向传播

import numpy as np


 

class FullyConnected:

    def __init__(self, W, b):

        r'''

        全连接层的初始化。

        Parameter:

        - W: numpy.array, (D_in, D_out)

        - b: numpy.array, (D_out)

        '''

        self.W = W

        self.b = b

        self.x = None

        self.original_x_shape = None

    def forward(self, x):

        r'''

        全连接层的前向传播。

        Parameter:

        - x: numpy.array, (B, d1, d2, ..., dk)

        Return:

        - y: numpy.array, (B, M)

        '''

        ########## Begin ##########

        return np.matmul(x,self.W)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是numpy实现mlp的反向传播代码: ``` import numpy as np def relu(x): return np.maximum(x, 0) def softmax(x): exp_x = np.exp(x - np.max(x, axis=1, keepdims=True)) return exp_x / np.sum(exp_x, axis=1, keepdims=True) def cross_entropy(y_pred, y_true): return -np.sum(y_true * np.log(y_pred)) / len(y_pred) def l2_regularization(lmbda, w1, w2): return lmbda / 2 * (np.sum(np.square(w1)) + np.sum(np.square(w2))) def mlp_backward(X, y, w1, b1, w2, b2, learning_rate, lmbda): # forward pass z1 = np.dot(X, w1) + b1 a1 = relu(z1) z2 = np.dot(a1, w2) + b2 a2 = softmax(z2) # compute gradients delta2 = a2 - y delta1 = np.dot(delta2, w2.T) * (z1 > 0) dw2 = np.dot(a1.T, delta2) db2 = np.sum(delta2, axis=0, keepdims=True) dw1 = np.dot(X.T, delta1) db1 = np.sum(delta1, axis=0) # add L2 regularization dw2 += lmbda * w2 dw1 += lmbda * w1 # update weights and biases w2 -= learning_rate * dw2 b2 -= learning_rate * db2 w1 -= learning_rate * dw1 b1 -= learning_rate * db1 # compute loss loss = cross_entropy(a2, y) + l2_regularization(lmbda, w1, w2) return w1, b1, w2, b2, loss ``` 其中,X为输入数据,y为标签,w1和w2为权重矩阵,b1和b2为偏置向量,learning_rate为学习率,lmbda为L2正则化系数。在forward pass中,首先计算第一层的加权和z1和激活函数a1,然后计算第二层的加权和z2和激活函数a2。在backward pass中,首先计算输出层的误差项delta2和隐藏层的误差项delta1,然后根据误差项计算梯度dw2、db2、dw1和db1。最后,加上L2正则化项,更新权重矩阵和偏置向量,并计算损失函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一辈子的拥抱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值