手撕神经网络:从零开始实现一个简单的神经网络(python)

本文介绍如何从零开始用Python实现一个简单的全连接神经网络,用于二分类任务。通过理解网络结构、前向传播、反向传播以及优化算法,加深对神经网络工作原理的认识。代码实现基于IPython,使用tanh激活函数和全批量梯度下降优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手撕神经网络:从零开始实现一个简单的神经网络

1. 前言

现在有很多深度学习平台可以用,甚至我们根本不需要知道网络背后是怎么运行的,就可以训练出我们想要的模型,但是从学习的角度,从零开始写一个简单的神经网络是有必要的,它将有助于理解神经网络的工作原理。

之前有写过基于 TF 的全连接神经网络的实现,可以参考深度学习笔记——全连接神经网络样例程序及详细注释。但是这里将不借助任何深度学习平台来实现一个全连接神经网络,并用这个网络来实现分类任务。

本篇文章主要参考 Implementing a Neural Network from Scratch in Python – An Introduction

另外如果你想实现一个卷积神经网络,可以参考 CNN-from-Scratch

2. 网络结构

网络的结构很简单,如下图所示,两层全连接神经网络,激活函数为 t a n h tanh tanh。优化算法为 full batch SGD,没有加 momentum,关于优化算法可以参考 深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结。参数初始化方式选用最简单的随机初始化。

在这里插入图片描述
在这里插入图片描述

用这个网络解决一个二分类问题,数据直接借助 sklearn 生成,借助 matplotlib 来可视化分类的结果。整个代码用 python(ipython)实现。

整个网络的前向传播过程如下:

z 1 = x W 1 + b 1 a 1 = tanh ⁡ ( z 1 ) = e z 1 − e − z 1 e z 1 + e − z 1 z 2 = a 1 W 2 + b 2 y ^ = a 2 = s o f t m a x ( z 2 ) \begin{aligned} z_1 & = xW_1 + b_1 \\ a_1 & = \tanh(z_1) = \frac{e^{z_1} - e^{-{z_1}}}{e^{z_1} + e^{-{z_1}}} \\ z_2 & = a_1W_2 + b_2 \\ \hat{y} & = a_2 = \mathrm{softmax}(z_2) \end{aligned} z1a1z2y^=xW1+b1=tanh(z1)=ez1+e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值