Numpy实现Conv2D

本文介绍了如何在Python中构建神经网络层,包括权重初始化、前向传播和反向传播过程,以及一份针对Python开发者提供的全面且体系化的前端开发学习资料,强调了资源中的大厂经验分享和实战项目的重要性。
摘要由CSDN通过智能技术生成

self.stride = stride

self.input_shape = input_shape

self.trainable = True

def initialize(self, optimizer):

Initialize the weights

filter_height, filter_width = self.filter_shape

channels = self.input_shape[0]

limit = 1 / math.sqrt(np.prod(self.filter_shape))

self.W = np.random.uniform(-limit, limit, size=(self.n_filters, channels, filter_height, filter_width))

self.w0 = np.zeros((self.n_filters, 1))

Weight optimizers

self.W_opt = copy.copy(optimizer)

self.w0_opt = copy.copy(optimizer)

def parameters(self):

return np.prod(self.W.shape) + np.prod(self.w0.shape)

def forward_pass(self, X, training=True):

batch_size, channels, height, width = X.shape

self.layer_input = X

Turn image shape into column shape

(enables dot product between input and weights)

self.X_col = image_to_column(X, self.filter_shape, stride=self.stride, output_shape=self.padding)

Turn weights into column shape

self.W_col = self.W.reshape((self.n_filters, -1))

Calculate output

output = self.W_col.dot(self.X_col) + self.w0

Reshape into (n_filters, out_height, out_width, batch_size)

output = output.reshape(self.output_shape() + (batch_size, ))

Redistribute axises so that batch size comes first

return output.transpose(3,0,1,2)

def backward_pass(self, accum_grad):

Reshape accumulated gradient into column shape

accum_grad = accum_grad.transpose(1, 2, 3, 0).reshape(self.n_filters, -1)

if self.trainable:

Take dot product between column shaped accum. gradient and column shape

layer input to determine the gradient at the layer with respect to layer weights

grad_w = accum_grad.dot(self.X_col.T).reshape(self.W.shape)

The gradient with respect to bias terms is the sum similarly to in Dense layer

grad_w0 = np.sum(accum_grad, axis=1, keepdims=True)

Update the layers weights

self.W = self.W_opt.update(self.W, grad_w)

self.w0 = self.w0_opt.update(self.w0, grad_w0)

Recalculate the gradient which will be propogated back to prev. layer

accum_grad = self.W_col.T.dot(accum_grad)

Reshape from column shape to image shape

accum_grad = column_to_image(accum_grad,

self.layer_input.shape,

self.filter_shape,

stride=self.stride,

output_shape=self.padding)

return accum_grad
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

以上前端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值