优达学城深度学习之三(上)——卷积神经网络

简介: 优达学城深度学习之三(上)——卷积神经网络

   开始都会说什么是机器学习?机器学习的应用是什么?用机器在海量数据中学习得到可以解决一类问题的办法,这就是我的理解。图像处理、文本处理、无人驾驶、等,深度学习最热门的应用就是无人驾驶。而深度学习的核心是神经网络。神经网络就是模拟人的大脑工作。所以神经网络很重要、

   神经网络是机器学习中的一个模型,可以用于两类问题的解答:

  • 分类:把数据划分成不同的类别
  • 回归:建立数据间的连续关系

分类问题


录取与不录取问题


b79b803231356686cf8f745dca23b305.jpgd0a2c244194c5f75dd733fa753a87678.jpg

如何让电脑找到这条线呢? 所以接下来我们要学习找到这条线的算法。

线性界限更高维度的界限


对于二维数据是线性界限


e57c0411c70fbeadf1fd2ddc5a6307de.jpg

对于更高维度的界限。需要平面,甚至曲面。


628e807a6d829a6e1e9859b55c5ef081.jpg

b5e6f2f67db7e6642c188d84a64fac7f.jpg

Logistics(对数概率)感知器


  感知器由两个节点构成,第一个是线性求和,第二个是对线性求和的结果进行阶跃,从而得到0、1

0421bf58aaf993e9e15c56219ef5f5bb.jpg

a43488120aa33293562b249092f89032.jpg

ff048020d6a888d8af2ecbcb0366fabb.jpg

两种格式,一般是左边。

为何是神经网络


a1d89b7cd5b668b07752aa6b5730f4c5.jpg

感知器的结果和人体大脑神经元很相似,这个感知器和人体大脑的神经元的链接方式类似。我们会连接这些感知器来创建神经网络,与大脑神经原连接方式很相似,都是一个神经元的输出作为一个神经元的输入。

作为Logistic(对数概率)运算符的感知器


   我们将见到感知器的很多强大应用之一。作为逻辑运算符!你将有机会为最常见的逻辑运算符创建感知器:ANDORNOT 运算符。然后,我们将看看如何处理比较难处理的 XOR 运算符。

3dc9ab0c3c1d59c78f74f852315d2d2a.png

AND 感知器的权重和偏差是什么?


将权重(weight1weight2)和偏差 bias 设为正确的值,以便如上所示地计算 AND 运算。

importpandasaspd# TODO: Set weight1, weight2, and biasweight1=2.0weight2=2.0bias=-3.0# DON'T CHANGE ANYTHING BELOW# Inputs and outputstest_inputs= [(0, 0), (0, 1), (1, 0), (1, 1)]
correct_outputs= [False, False, False, True]
outputs= []
# Generate and check outputfortest_input, correct_outputinzip(test_inputs, correct_outputs):
linear_combination=weight1*test_input[0] +weight2*test_input[1] +biasoutput=int(linear_combination>=0)
is_correct_string='Yes'ifoutput==correct_outputelse'No'outputs.append([test_input[0], test_input[1], linear_combination, output, is_correct_string])
# Print outputnum_wrong=len([output[4] foroutputinoutputsifoutput[4] =='No'])
output_frame=pd.DataFrame(outputs, columns=['Input 1', '  Input 2', '  Linear Combination', '  Activation Output', '  Is Correct'])
ifnotnum_wrong:
print('Nice!  You got it all correct.\n')
else:
print('You got {} wrong.  Keep trying!\n'.format(num_wrong))
print(output_frame.to_string(index=False))

OR 感知器


5786f646d4f5d6627d2403365924fd91.png

   OR 感知器和 AND 感知器很相似。在下图中,OR 感知器和 AND 感知器的直线一样,只是直线往下移动了。你可以如何处理权重和/或偏差以实现这一效果?请使用下面的 AND 感知器来创建一个 OR 感知器。

8916cd299467c5cc419eae358ae4ffe0.png

a1f4225ae93af5ef7095fa47d53a17eb.png

NOT 感知器


和我们刚刚研究的其他感知器不一样,NOT 运算仅关心一个输入。如果输入是 1,则运算返回 0,如果输入是 0,则返回 1。感知器的其他输入被忽略了。

在此测验中,你将设置权重(weight1weight2)和偏差 bias,以便对第二个输入进行 NOT 运算,并忽略第一个输入。

importpandasaspd# TODO: Set weight1, weight2, and biasweight1=0.0weight2=-4.0bias=3.0# DON'T CHANGE ANYTHING BELOW# Inputs and outputstest_inputs= [(0, 0), (0, 1), (1, 0), (1, 1)]
correct_outputs= [True, False, True, False]
outputs= []
# Generate and check outputfortest_input, correct_outputinzip(test_inputs, correct_outputs):
linear_combination=weight1*test_input[0] +weight2*test_input[1] +biasoutput=int(linear_combination>=0)
is_correct_string='Yes'ifoutput==correct_outputelse'No'outputs.append([test_input[0], test_input[1], linear_combination, output, is_correct_string])
# Print outputnum_wrong=len([output[4] foroutputinoutputsifoutput[4] =='No'])
output_frame=pd.DataFrame(outputs, columns=['Input 1', '  Input 2', '  Linear Combination', '  Activation Output', '  Is Correct'])
ifnotnum_wrong:
print('Nice!  You got it all correct.\n')
else:
print('You got {} wrong.  Keep trying!\n'.format(num_wrong))
print(output_frame.to_string(index=False))

XOR 感知器


af31bc51bec09dbbce19903f7c2a93e4.png

测验:构建一个 XOR 多层感知器


现在我们使用 AND、NOT 和 OR 感知器构建一个多层感知器,以便创建 XOR 逻辑!

下面的神经网络包含三个感知器:A、B 和 C。最后一个 (AND) 已经提供给你了。神经网络的输入来自第一个节点。输出来自最后一个节点。

上面的多层感知器计算出 XOR。每个感知器都是 AND、OR 和 NOT 的逻辑运算。但是,感知器 A、B、C 和 D 并不表明它们的运算。在下面的测验中,请为四个感知器设置正确的运算,以便计算 XOR。

9e82b5a6bb75a75a92fa44810587169e.png

       在 XOR 神经网络中为感知器设置运算

85adee8383918009384121aab4b15cce.png

感知器技巧 - 计算机如何“学习”分类?


    在上一部分,你使用你自己的逻辑和数学知识为某些最常见的逻辑运算符创建了感知器。但是在现实生活中,除了这些非常简单的形式,我们人类是无法靠自己构建这些感知器函数,找到用于分类的曲线的。

    计算机如何根据我们人类给出的结果,来自己进行构建感知器函数。对于这一点,有一个非常棒的技巧会帮到我们。就是希望离我们越来越近,

24d768efe5a93a6120f989f963594e31.png

介绍一个让直线离点近些的诀窍。

6cca2d7455926e7388006aad39e3e23e.png

d27bc224b6d493a581694a04fe2e74f1.png

    上面就是去改变这条直线可是怎么改变呢?就是让原本是1的点归化为0的点,使得 w、b 都减去一个学习率,然后得到新直线,看是否会越来近。同理原本是0的点归为1的点,使得w,b都加上一个学习率。

    整个数据集中的每一个点都会把分类的结果提供给感知器(分类函数),并调整感知器。——这就是计算机在神经网络算法中,找寻最优感知器的原理。

感知器算法


82bafbce18b603f9362f7aec45a6eb23.jpg

  掌握了感知器技巧后,我们就可以编写完整的感知器运算的算法了!

   该编写代码了!在此练习中,你将实现感知器算法以分类下面的数据(位于文件 data.csv 中)。

70c0f6a616b755d20bd71fef34bbbd0b.jpg

112a2d1548206eb356ebc8cfe3d80698.png

运行结果将绘出感知器算法给出的解决方案。它实际上会画出一组虚线,显示算法如何接近最佳解决方案(用黑色实线表示)。

importnumpyasnp# Setting the random seed, feel free to change it and see different solutions.np.random.seed(42)
defstepFunction(t):
ift>=0:
return1return0defprediction(X, W, b):
returnstepFunction((np.matmul(X,W)+b)[0])
# TODO: Fill in the code below to implement the perceptron trick.# The function should receive as inputs the data X, the labels y,# the weights W (as an array), and the bias b,# update the weights and bias W, b, according to the perceptron algorithm,# and return W and b.defperceptronStep(X, y, W, b, learn_rate=0.05):
# Fill in codeforiinrange(len(X)):
y_hat=prediction(X[i],W,b)
ify[i]-y_hat==1:
W[0] +=X[i][0]*learn_rateW[1] +=X[i][1]*learn_rateb+=learn_rateelify[i]-y_hat==-1:
W[0] -=X[i][0]*learn_rateW[1] -=X[i][1]*learn_rateb-=learn_ratereturnW, b# This function runs the perceptron algorithm repeatedly on the dataset,# and returns a few of the boundary lines obtained in the iterations,# for plotting purposes.# Feel free to play with the learning rate and the num_epochs,# and see your results plotted below.deftrainPerceptronAlgorithm(X, y, learn_rate=0.01, num_epochs=25):
x_min, x_max=min(X.T[0]), max(X.T[0])
y_min, y_max=min(X.T[1]), max(X.T[1])
W=np.array(np.random.rand(2,1))
b=np.random.rand(1)[0] +x_max# These are the solution lines that get plotted below.boundary_lines= []
foriinrange(num_epochs):
# In each epoch, we apply the perceptron step.W, b=perceptronStep(X, y, W, b, learn_rate)
boundary_lines.append((-W[0]/W[1], -b/W[1]))
returnboundary_lines1data.csv数据0.78051,-0.063669,10.28774,0.29139,10.40714,0.17878,10.2923,0.4217,10.50922,0.35256,10.27785,0.10802,10.27527,0.33223,10.43999,0.31245,10.33557,0.42984,10.23448,0.24986,10.0084492,0.13658,10.12419,0.33595,10.25644,0.42624,10.4591,0.40426,10.44547,0.45117,10.42218,0.20118,10.49563,0.21445,10.30848,0.24306,10.39707,0.44438,10.32945,0.39217,10.40739,0.40271,10.3106,0.50702,10.49638,0.45384,10.10073,0.32053,10.69907,0.37307,10.29767,0.69648,10.15099,0.57341,10.16427,0.27759,10.33259,0.055964,10.53741,0.28637,10.19503,0.36879,10.40278,0.035148,10.21296,0.55169,10.48447,0.56991,10.25476,0.34596,10.21726,0.28641,10.67078,0.46538,10.3815,0.4622,10.53838,0.32774,10.4849,0.26071,10.37095,0.38809,10.54527,0.63911,10.32149,0.12007,10.42216,0.61666,10.10194,0.060408,10.15254,0.2168,10.45558,0.43769,10.28488,0.52142,10.27633,0.21264,10.39748,0.31902,10.5533,1,00.44274,0.59205,00.85176,0.6612,00.60436,0.86605,00.68243,0.48301,01,0.76815,00.72989,0.8107,00.67377,0.77975,00.78761,0.58177,00.71442,0.7668,00.49379,0.54226,00.78974,0.74233,00.67905,0.60921,00.6642,0.72519,00.79396,0.56789,00.70758,0.76022,00.59421,0.61857,00.49364,0.56224,00.77707,0.35025,00.79785,0.76921,00.70876,0.96764,00.69176,0.60865,00.66408,0.92075,00.65973,0.66666,00.64574,0.56845,00.89639,0.7085,00.85476,0.63167,00.62091,0.80424,00.79057,0.56108,00.58935,0.71582,00.56846,0.7406,00.65912,0.71548,00.70938,0.74041,00.59154,0.62927,00.45829,0.4641,00.79982,0.74847,00.60974,0.54757,00.68127,0.86985,00.76694,0.64736,00.69048,0.83058,00.68122,0.96541,00.73229,0.64245,00.76145,0.60138,00.58985,0.86955,00.73145,0.74516,00.77029,0.7014,00.73156,0.71782,00.44556,0.57991,00.85275,0.85987,00.51912,0.62359,0

非线性界限


    就是这样,如果有个学生是给的条件是9,1,就是平时成绩是1,考试成绩为9,但是也被录取了,显然就不合适了,所以要把线性变成曲线,圆,或者别的函数关系,只要更加好就行,我们需要开发更为复杂的算法来解决这个问题。我们需要重新定义感知器算法,使其能泛化到除直线以外的其他类型曲线。

d51b0a1dfafcad0353c5dba9d0524256.jpg

Logistic(对数概率)误差函数-初探


     刚刚的感知器算法实现告诉我们,获取正确分类的方式,就是通过每一个错误分类的点,评估错误点位置与我们期望位置之间的差异,来慢慢的修正我们分类函数。

    因为误差暗示了如何进行正确的分类,因此误差的定义就变得尤为重要,这也被称为误差函数

Logistic(对数概率)误差函数与梯度下降-初探


    误差函数提供给我们的预测值与实际值之间的差异,但是这个差异如何指导我们权重的更新呢?我们的目标是找到最小的误差函数值来找到与实际值误差最小的预测值。

    在简单的线性方程中,我们可以通过判断“预测值与实测值相比是大了还是小了”来决定权重是增加还是减少。但是在更为复杂的非线性环境中呢?复杂的数学问题,我们就直接来看看学者们的解决策略。

    假设一维问题是一条直线,那么二维问题就是一个平面,而三维问题就是一个曲面。曲面可以理解为有山峰也有低谷的地面,误差最小的地方就是低谷处,我们希望计算机找到的就是这个低谷的值。为了找到这个低谷,学者们发明了梯度下降

4079cd4dd2982626838f1a6deccee31c.png

    如果仅仅是距离的话,那么正巧都是2 那么如何选择,那么就无法选择了,所以科学家们想到了梯度,变化最快的那个方向,因为梯度所以不能时离散函数,必须是连续的哦。

     我们的目需要找到用什么误差函数?

     当点分类错误时,惩罚值等于点离直线的距离。将所有点的误差相加,得到总误差,两个错误的点使得误差很大,需要移动直线,降低误差,现在可以实现误差函数连续变化了,我们队直线参数进行小改动,使得误差函数产生一些小的变化,移动直线时,虽然有些误差变大了,但是总得误差减少了,而且还都分开了,能够构建具有这一属性的误差函数后,借可以使用梯度下降来解决我们的问题了。

90efa7432876ce77ce498dfe7a2dcd39.png

322df69b22dfeb10760a19017d1e4e11.jpg


目录
打赏
0
0
0
0
6
分享
相关文章
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
49 3
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。
基于MobileNet深度学习网络的MQAM调制类型识别matlab仿真
本项目基于Matlab2022a实现MQAM调制类型识别,使用MobileNet深度学习网络。完整程序运行效果无水印,核心代码含详细中文注释和操作视频。MQAM调制在无线通信中至关重要,MobileNet以其轻量化、高效性适合资源受限环境。通过数据预处理、网络训练与优化,确保高识别准确率并降低计算复杂度,为频谱监测、信号解调等提供支持。
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
87 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
126 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
80 11
深度学习在安全事件检测中的应用:守护数字世界的利器
深度学习在安全事件检测中的应用:守护数字世界的利器
117 22
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
280 6

热门文章

最新文章