我的作业笔记:吴恩达的Python机器学习课程(神经网络篇)
本文将介绍吴恩达的机器学习课程中关于神经网络的编程作业3和4。这也是我们在课程中遇到的第一个复杂的非线性算法。我不了解你,但这个任务对于我来说肯定有一个陡峭的学习曲线。神经网络构成了深度学习的基础,它具有广泛的应用,如计算机视觉或自然语言处理。因此,重要的是获得基本权利并在python中编码这些赋值是确保这一点的一种方法。
在进入神经网络之前,让我们完成逻辑回归的最后一节 - 多类Logistic回归。
该系列练习利用由5000个训练示例组成的手写数字数据集,其中每个示例都是20×20像素的数字灰度图像。
加载数据集
由于数据集是以.mat格式而不是通常的.txt格式给出的,因此我需要使用scipy loadmat函数。官方文档可以在这里找到。(https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.io.loadmat.html)由于loadmat将.mat文件作为带有变量名称作为键的字典加载,因此分配X和y就像使用变量的键访问dict一样简单。
为了更好地理解数据集,具有数据的形状可以告诉我们数据的维度。 X形状为5000,400,其对应5000个训练示例,每个示例具有来自其20×20像素的400个特征。 y具有5000,1的形状,其中每个训练示例具有范围从1到10的标签(在该数据集中'0'数字被标记为'10')。
可视化数据
上面的代码块构造了100个子图,并使用plt.imshow随机可视化5000个训练示例中的100个。请注意,我们必须将训练示例重新塑造为20 X 20像素,才能将其可视化并将order =“F”作为参数添加到重塑功能中,以确保图像的方向是垂直的。
计算成本函数和梯度
这类似于我们在Logistic回归分配中使用的成本函数。
现在进行分类任务。由于我们有多个类,我们必须使用一对一分类方法(每个类一个分类器)训练多个逻辑回归分类器。
gradientDescent函数是我们之前实现的常用优化函数。对于oneVsAll,它遍历所有的类,并使用梯度下降(作业中使用了fmincg函数)为每个类训练一组。然后all_theta捕获列表中的所有优化的theta并返回为numpy数组,重新塑造为theta的矩阵,其中第i行对应于标签i的分类器。 np.where在这里派上用场,为每个类得到一个y的向量,每个类的向量有1/0,以便在每次迭代中进行二进制分类任务。
绘制成本函数以确保梯度下降按预期工作
alpha = 1,num_iters = 300
为了进行预测,计算每个类的x(i)的概率,并且预测为具有最高概率的类
训练集准确度:91.46%
最后,神经网络的时间。使用相同的数据集,我们的目标是使用更复杂的算法(如神经网络)实现更高的精度。对于练习的第一部分,我们给出了优化的θ值,我们需要进行前馈传播以获得预测和模型精度。
加载优化的theta
使用前馈传播进行预测
训练集准确度:97.52%。与多级逻辑回归相比,准确度更高!
在作业4中,我们致力于从头开始实现神经网络。我们首先计算成本函数和θ的梯度。
该作业分步骤进行,首先是正则化成本、梯度,最后是正则化梯度。如果你想继续,我修改了代码,只要你使用正确的索引,它就会返回中间步骤的值。
flatten()函数将数组折叠为一维,np.append将参数“展开”为向量。
在讲座中讨论了初始theta的对称性问题。为了打破这种对称性,需要随机初始化。
最后,轮到我们使用前馈传播和反向传播来优化θ值。我正在使用的优化算法再次是相同的旧梯度下降。
对执行代码的人发出警告。根据您的计算能力计算需要相当长的时间,如果您正在优化alpha和num_iters值,则需要更长的时间。我使用0.8表示alpha,对num_iters使用800,但我相信使用更多的tunnin可以获得更好的准确性。
GitHub传送门: (https://github.com/benlau93 / machine - learning by andrew - ng- in- python)
后续期待
来源:https://towardsdatascience.com/andrew-ngs-machine-learning-course-in-python-neural-networks-e526b41fdcd9