读书笔记:python神经网络编程 [英]塔里克·拉希德(Tariq Rashid)

读书笔记:python神经网络编程 [英]塔里克·拉希德(Tariq Rashid)

2020年2月份读完的一本神经网络入门书。求中英文版和源代码的盆友们请留言邮箱。

python神经网络编程 [英]塔里克·拉希德(Tariq Rashid)
如何读这本书:
这本书结构非常清晰,适合完全无基础的神经网络入门。读完前两章就读完了它的精髓。第一章是基础知识,读懂并理解基础知识很重要,这样第二章的代码才能看懂。第二章的核心是一个“识别手写数字”的图像识别问题的课题,并训练出一个神经网络解决问题。在开始课题之前,会有 jupyter notebook 教程。之后会非常详细地解释针对这个课题每一部分的代码怎么写。自己跟着书在 jupyter notebook 里敲一遍就懂了。(建议自己敲,不要复制粘贴)

以下节选自我的读书报告:

第一章 神经网络工作原理
一、 预测器
若简单机器接受了一个输入,并做出应有的预测,输出结果,所以我们将其称为预测器。 使用线性函数作为模型, 并使用可调节的梯度值作为参数。 改进这些模型的一种好方法是, 基于模型和已知真实示例之间的比较, 得到模型偏移的误差值, 调整参数。
二、 分类器
使用直线将不同性质的事物分开,即训练线性分类器,调整分界线的斜率,使其能够正确分类。 设置线性函数: y=Ax, A 为斜率参数。 计算机算法如下:
(1) 随机为 A 取值, 误差值 E 为期望目标值-实际输出值。
(2) 寻找误差值 E 与 A 的变化量的关系。
(3) 基于当前的误差值调整参数。
添加一个调节系数 L, 称为学习率。 使用学习率, 可以调节改进速率,这样单一的训练样本就不能主导整个学习过程。三、 神经网络
(1) 前馈信号
在训练网络阶段,将数据从输入层传到输出层。
X hidden = W input_hidden • I
O hidden = sigmoid( X hidden )
X output = W hidden_output • O hidden
O output = sigmoid( X output)
(2) 误差反向传播将神经网络的输出值与训练样本中的输出值进行比较, 计算出误差。 将误差从输出向后传播到网络。 我们需要使用这个误差值来调整神经网络本身, 更新权重, 进而改进神经网络的输出值。
(3) 更新权重
神经网络的误差是内部链接权重的函数。 改进神经网络, 意味着通过改变权重减少这种误差。 通过误差函数的梯度下降, 采取小步长, 迭代地改进权重。

第二章 训练自己的神经网络
一、 课题背景与数据集
1 课题内容: 识别手写数字, 本质上是图像识别问题。 例如,给出如图所示的手写数字图片,需利用神经网络判断出代表的数字是 0 至 9 中的哪个。
2. 数据集: 手写数字的 MNIST 数据库。 本实验中采用数据集中的小子集,训练数据 100 例,测试数据 10 例。 数据格式为 csv 文件。 下面显示的是加载到文本编辑器中的 MNIST 测试集的一部分。第一个值是标签, 即书写者实际希望表示的数字, 如“7”或“9”。 随后的值,由逗号分隔, 是手写体数字的像素值。 像素数组的尺寸是 28 乘以 28, 因此在标签后有 784 个值。
3. 实验环境: python3.7
二、 网络结构
该神经网络分为输入层、隐藏层、输出层 3 层。其中, 输入层共 28*28=784个节点, 代表所有的像素; 输出层有 10 个节点,分别代表 0-9 的 10 个特征状态。隐藏层选择介于输出层与输入层之间的节点数,暂定为 100 个,后续可调节。
三、 实验步骤与代码
1.构建网络框架
构建 neuralNetwork 类,包含初始化函数__init__(self, inputnodes, hiddennodes,outputnodes, learningrate)、 训练函数 train(self,inputs_list, targets_list)和查询函数query(self,inputs_list)
(1) 初始化函数:
初始化函数用来初始化网络。 初始化网络需要设置输入层节点、隐藏层节点和输出层节点的数量。 同时需要初始化权重、 设定学习率和激活函数。
(2) 训练函数:
训练函数内部首先前馈信号得到输出结果,计算误差后反向传播, 用来更新权重。
(3) 查询函数:
查询函数是在网络训练完成后,在进行数据测试与查询时调用的函数, 内部只有前馈信号的部分。
2. 训练网络
(1) 初始化网络、 读入训练数据(2) 训练网络:100 个训练数据较少,因此设置 5 轮重复训练。
四、 实验结果
可以发现, 该向量中标签“7”位置的输出值最大, 因此判定为 7。 由此可见,该网络训练成功, 能较为准确的预测。用测试数据集进行测试, 代码如下:由于此次选用的训练数据集和测试数据集数量较少, 因此准确率仅为 60%,若增加数据集数量, 性能会有提升。

本博客为原创作品,欢迎指导,转载请务必说明出处,附上本文链接,谢谢!

发布了20 篇原创文章 · 获赞 1 · 访问量 200

猜你喜欢

转载自blog.csdn.net/weixin_43973433/article/details/104888185