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

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

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

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

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

分类问题


录取与不录取问题


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


相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
20 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
25天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
246 55
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
173 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
22天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
60 31
|
14小时前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
29天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
357 7