全连接层->卷积层

  • 用有一个隐藏层的MLP训练ImageNet数据集(300*300的图像,有1000个类别),要有10000个输出
    会有10亿个可学习的参数,量太大
    全连接:一个输出是根据所有输入加权得到
  • 在图片中识别物体:
  1. translation invariance(变换不变性):无论这个物体在哪,模型都会有相近的输出
  2. 本地性:像素点与周围的像素点联系更紧密

卷积层

  • 本地性:一个输出只从k*k个输入的窗口中计算
  • 变换不变性:不同的输出是使用相同的k*k的权重

由此一个卷积层模型的参数不再依赖于输入/输出的大小,只与窗口大小相关
一个核可以学习识别一个模式

单通道的输入和输出的卷积

# X是输入,K是权重,都是矩阵
h,w = K.shape
Y = torch.zeros((X.shape[0] - h + 1,X.shape[1] - w + 1))
for i in range(Y.shape[0]):
	for j in range(Y.shape[1]):
		Y[i,j] = (X[i:i+h,j:j+w]*K).sum()

池化层(汇聚层)

  • 卷积神经网络对位置很敏感,输入的一个像素的变化会导致输出的一个像素的变化
  • 池化层会在k*k的窗口中计算元素的均值(均值汇聚)/最大值(最大汇聚)
# h,w是池化窗口的高和宽
# mode:max or avg
Y = torch.zeros((X.shape[0] - h + 1,X.shape[1] - w + 1))
for i in range(Y.shape[0]):
	for j in range(Y.shape[1]):
		if mode == 'max':
			Y[i,j] = X[i:i+h,j:j+w].max()
		elif mode == 'avg':
			Y[i,j] = X[i:i+h,j:j+w].mean()

卷积神经网络

  • 一个用卷积层的堆提取特征的神经网络
    激活函数用在每个卷积层后
    使用池化来减少位置敏感度
  • 现代化的CNN是有各类超参数和层连接(AlexNet,VGG等)的深度神经网络
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐