1024个像素点输入到神经网络的输入端口,得到10个输出值,即手写体识别。由于样本数量并不能达到足够多,采用小批量训练,将10000个样本分成100份,每份100,训练完一个轮循,打乱顺序接着训练。
神经网络特殊在有隐藏层,在输出层面才知道误差,隐藏层误差求不出来,通过及其复杂的分享传播算法来反向调整,达到与正向的梯度下降法相同效果。
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
整个神经网络实际就是有个巨大无比的复合函数,嵌套的层数非常的多
编辑
编辑
深度学习框架的优化器会帮我们做反向传播,计算权重,做梯度下降。
编辑
加了卷积操作的神经网络,优化神经网络的缺点
编辑
编辑
编辑
编辑
编辑
全连接神经网络在给图像进行变维度的时候,或破坏二维图像的结构,变成一维,找不到像素之间的相似性。同时神经网络还有其他的局限,因此需要引入卷积神经网络。
卷积层主要用于提取主要的特征,池化层在尽量保留数据特征情况下进行降维处理。
ANN:人工神经网络--与生物神经网络对应
DNN:深度神经网络--与浅层次神经网络对应
CNN:卷积神经网络(适合处理图像)--与RNN循环神经网络并列 (适合处理语音,文字序列数据问题)
编辑
卷积运算主要特征是提取特征,伴随着降维度
编辑
编辑
编辑
如果想要输入数据与输出数据一样大的话,我们需要采用填充的策略,一般填充0.不然越卷积越小。
卷积核越大,输出矩阵越小,填充越大,输出矩阵越大。原矩阵越大,输出越大。
编辑
编辑
卷积运算提取特征案例,伴随着降维度。卷积核是训练调整出来的。通过卷积核调整权重
机器对于提取后的特征更加好处理,只是人喜欢彩色图像。因此卷积就是提取特征只给机器看得懂。卷积层次越深,越抽象,人越看不懂,具有不可解释性,但结果识别缺失正确的。梯度下降法调参卷积核与偏置。初始值是随机的,不断调处来的。卷积神经网络工作原理来自对猫的大脑皮层研究。
# 01_img_conv.py # 图像卷积示例 :自己设计卷积核提取特征,机器学习是机器提取特征的 from scipy import signal from scipy import misc import matplotlib.pyplot as plt import numpy as np # 读取图像 im = misc.imread("../data/zebra.png", # 图像路径 flatten=True) # 单通道灰度图像 flt = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) # 卷积核 水平方向纹理清晰 flt2 = np.array( [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]) # 卷积核2 垂直分析纹理清晰 # 对图像进行卷积 conv_img1 = signal.convolve2d( im, # 输入 flt, # 卷积核 boundary="symm", # 边沿处理方式 mode="same").astype("int32") # 输入输出数据大小一样 conv_img2 = signal.convolve2d( im, # 输入 flt2, # 卷积核 boundary="symm", # 边沿处理方式 mode="same").astype("int32") # 输入输出数据大小一样 plt.figure("Conv2D") plt.subplot(131) # 1行3列第1个子图 plt.imshow(im, cmap="gray") # 原图 plt.xticks([]) # x轴刻度为空 plt.yticks([]) # y轴刻度为空 plt.subplot(132) # 1行3列第2个子图 plt.imshow(conv_img1, cmap="gray") # 卷积后的图像 plt.xticks([]) # x轴刻度为空 plt.yticks([]) # y轴刻度为空 plt.subplot(133) # 1行3列第3个子图 plt.imshow(conv_img2, cmap="gray") # 卷积后的图像 plt.xticks([]) # x轴刻度为空 plt.yticks([]) # y轴刻度为空 plt.show()
编辑
编辑
一般来说是n个卷积激活池化和一个全连接层组成卷积神经网络。
图中通过卷积核提取三个特征,得到三个特征图谱,送给神经网络。
卷积实际还是线性运算,激活层将输出转化成非线性输出
池化实现降维,挑选区域最大值,保留最大特征。叫最大池化,求区域平均值叫平均值池化,一般用最大池化。
编辑
卷积层与池化感觉有点像,其实不像
1.卷积层提取特征伴随降维,池化降维
2.卷积层参数需要学习训练,池化没有,直接取出最大值
3.卷积核一般单数,池化是双数
4.卷积层通道数一般会变化,池化不会变化
5.微小变化可能影响卷积,但不影响池化为什么不直接用全连接层,解释如上
经典的卷积神经网络LeNet介绍:将32*32单通道图像经过第一层卷积,变成6个通道的28x28的特征图,即通过6个卷积核提取6个特征。再进行池化降维成14x14特征图,在此基础上继续卷积 得到16个通道,即用了16个卷积核卷积。再池化,16个通道,每个通道都是5X5,变维度拉升成1维度,送给全连接模型。为什么是两层的卷积,因为这根据实际训练得出的,加三层没有太大提升。
编辑
编辑
输入是224x224的三通道图像,经过连续的5组卷积池化与3组全连接模型,产生1000类别输出。比赛是千类识别之一
CNN的层数计算:一般来说有参数的才算作1层。卷积层与全连接层有参数,池化层没有参数不算。
VGG卷积神经网络名气更大
编辑
编辑 卷积神经网络可视化网站
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
黑色(0,0,0)白色(255,255,255)
编辑
色彩空间转换直接API即可
编辑
为什么彩色图像转换灰度图像:.彩色对轮廓纹理形态处理不需要色彩信息,灰度图像更加好
编辑透视变换经常用于图像矫正
编辑
编辑
编辑
编辑
编辑
编辑
就是将图像的三个通道转换成一个通道,处理方法有如下。
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
# 02_img_read_show.py # 读取、显示图像示例 import cv2 im = cv2.imread("../test_img/Linus.png", # 图像路径 1) # 1-彩色图像 0-灰度图像 print(type(im)) # 图像类型 数组 print(im.shape) # 图像形状 (216,160,3)高宽通道数 cv2.imshow("Linus", # 窗体名称(重复则会覆盖前面的窗体) im) # 图像数据 cv2.imwrite("Linus_new.png", # 处理完成后保存路径 im) # 图像数据 cv2.waitKey() # 等待用户敲击按键(阻塞函数) cv2.destroyAllWindows() # 销毁所有创建的窗体