【深度学习】6-4 卷积神经网络 - CNN的实现

news/2024/11/23 20:50:54/

CNN的实现
在这里插入图片描述
网络的构成是“Convolution - ReLU - Pooling -Affine - ReLU - Affine - Softmax”,我们将它实现为名为 SimpleConvNet的类。
首先来看一下 SimpleConvNet的初始化(init),取下面这些参数。
input_dim——输入数据的维度:(通道,高,长)
conv_param——卷积层的超参数(字典)。字典的关键字如下:
filter_num——滤波器的数量
filter_size——滤波器的大小
stride——步幅
pad——填充
hidden_size——隐藏层(全连接)的神经元数量
output_size——输出层(全连接)的神经元数量
weitght_int_std——初始化时权重的标准差

这里,卷积层的超参数通过名为 conv_param的字典传入。

SimpleConvNet的实现如下:

class SimpleConvNet:def __init__(self, input_dim=(1,28,28), conv_param={'filter_num':30, 'filter_size':5,'pad':0, 'stride':1}, hidden_size=100,output_size=10, weight_init_std=0.01):filter_num = conv_param['filter_num']filter_size = conv_param['filter_size']filter_pad = conv_param['filter_pad']filter_stride = conv_param['filter_stride']input_size = input_dim[1]conv_output_size = (input_size - filter_size + 2*filter_pad) / filter_stride +1pool_output_size = int(filter_num * (conv_output_size /2) * (conv_output_size/2))# 这里将由初始化参数传入的卷积层的超参数从字典中取了出来(以方便后面使用),然后,计算卷积层的输出大小。# 接下来是权重参数的初始化部分self.params = {}self.params['W1'] = weight_init_std * np.random.randn(filter_num, input_dim[0],filter_size, filter_size)self.params['b1'] = np.zeros(filter_num)self.params['W2'] = weight_init_std * np.random.randn(pool_output_size, hidden_size)self.params['b2'] = np.zeros(hidden_size)self.params['W3'] = weight_init_std * np.random.randn(hidden_size, output_size)self.params['b3'] = np.zeros(output_size)# 最后生成必要的层self.layers = OrderDict()self.layers['Conv1'] = Convolution(self.params['W1'],self.params['b1'],conv_param['stride'],conv_param['pad'])self.layers['Relu1']= Relu()self.layers['Pool1']= Pooling(poo_h=2,pool_w=2,stride=2)self.layers['Affine1'] = Affine(self.params['W2'],self.params['b2'])self.layers['Relu2'] = Relu()self,layers['Affine2']= Affine(self.params['W3'],self.params['b3'])self.last_layer = SoftmaxWithLoss()# 从最前面开始按顺序向有序字典(OrderedDict)的layers中添加层。只有最后的SoftmaxWithLoss层被添加到别的变量LastLayer中。

以上就是simpleConvNet的初始化中进行的处理。像这样初始化后,进行推理的predict方法和求损失函数值的 Loss方法就可以像下面这样实现

def predict(self, x):for layer in self.layers.values():x = layer.forward(x)return xdef loss(self, x, t):y = self.predict(x)return self.lastLayer.forward(y,t)

这里,参数x是输入数据,t是监督标签。用于推理的predict方法从头开始依次调用已添加的层,并将结果传递给下一层。

在求损失函数的loss方法中,除了使用predict方法进行的forward处理之外,还会继续进行forward处理,直到到达最后的SoftmaxwithLoss层

下面是基于误差反向传播法求梯度的代码实现

def gradient(self,x,t):#forwardself.loss(x,t)#backwarddout = 1dout = self.lastLayer.backward(dout)layers = list(self.layers.values())layers.reverse()for layer in layers:dout = layer.backward(dout)# 设定grads={}grads['W1'] = self,layers['Conv1'].dwgrads['b1'] = self.layers['Conv1'].dbgrads['W2'] = self.layers['Affine1'].dwgrads['b2'] = self,layers['Affine1'].dbgrads['W3'] = self,layers['Affine2'].dwgrads['b3'] = self.layers['Affine2'].dbreturn grads

参数的梯度通过误差反向传播法(反向传播)求出

使用这个 SimpleConvNet学习 MNIST 数据集。训练数据的识别率为 99.82%,测试数据的识别率为 98.96%,测试数据的识别率大约为 99%,就小型网络来说,这是一个非常高的识别率。


http://www.ppmy.cn/news/520824.html

相关文章

v-model实现原理(一根绳上的蚂蚱)

目录 1、什么是v-model2、v-model实现原理3、实现示例3.1 实现text和textarea3.2 实现checkbox和radio3.3 实现select 1、什么是v-model v-model 本质上是一颗语法糖&#xff0c;可以用 v-model 指令在表单 <input>、<textarea> 及 <select>元素上创建双向数…

Codeforces Round 878 (Div. 3) A~E G1

杂谈&#xff1a;懒得想F和G2了&#xff0c;F太长了&#xff0c;看了G1过的人多一点就做它了&#xff0c;G2也没想出来&#xff0c;之后看看题解 Codeforces Round 878 (Div. 3) A. Cipher Shifer 题意&#xff1a;初始字符序列&#xff0c;在每个字符后加任意不同于本身的字…

1Panel 安装部署

1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。 1. 环境要求 安装前请确保您的系统符合安装条件&#xff1a; 操作系统&#xff1a;支持主流 Linux 发行版本&#xff08;基于 Debian / RedHat&#xff0c;包括国产操作系统&#xff09;&#xff1b; 服务器架构&#…

模拟电路系列分享-负反馈电路稳定性分析

目录 概要 整体架构流程 技术名词解释 1.负反馈放大电路产生自激震荡的条件 2.从实际运放的幅频&#xff0c;相频特性看自激振荡的可能性 小结 概要 在卡拉0K歌厅中,我们会见到这样一种现象:当麦克风位置不合适或者音量过大时, 喇叭中会出现一种非常难听的啸叫,捂住麦克风、赶紧…

什么是游戏引擎

游戏引擎是现代游戏开发的核心组成部分&#xff0c;它为开发者提供了一个强大的工具箱&#xff0c;可以创造出令人惊叹的游戏世界。本文将介绍游戏引擎的定义、功能以及对游戏行业的重要性。 一、什么是游戏引擎&#xff1f; 游戏引擎指的是一种软件框架&#xff0c;通过编程和…

记录制作音响的青葱岁月

结缘音响是源于2019年11月份机动车保养&#xff0c;等待保养的过程中顺便去周边的音响器材店溜达了一番&#xff0c;这一溜达不打紧&#xff0c;从此一发不可收拾的爱上了音响DIY。当时大约花了5000大洋换了4个JBL的喇叭&#xff08;真心入门级&#xff09;&#xff0c;一个JBL…

iPhone超霸气音响 山寨机外放听歌党你们颤抖了吗?

曾几何时&#xff0c;山寨机外放听歌党活跃于祖国各地&#xff0c;伴随着轻快的步伐 &#xff0c;或是呼啸而过的摩托车&#xff0c;一曲《月亮之上》、《荷塘月色》或是 《最炫民族风》迫使你跟着它的节奏一起摇摆。如今&#xff0c;有了这套 Philips双底座音箱Hi-Fi系统&…

css5530g怎样,源于对音质的高要求,音响挑选不得马虎

人们对于某一项技术的追求可以说是永无止境的&#xff0c;在音频设备领域当中这句话更是能够被应征。从世界第一款音响被发明至今&#xff0c;人们在声学的追求道路上似乎从未止步&#xff0c;截至目前为止我们已经能够享受到非常出色的音乐了&#xff0c;但是这对于极致挑剔的…