赞
踩
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
最后一点的计算方法是:
在上述卷积过程中,特征图比原始图减小了很多,我们可以在原图像的周围进行 padding,来保证在卷积过程中特征图大小不变。
按照步长为1来移动卷积核,计算特征图如下所示:
如果我们把stride增大,比如设为2,也是可以提取特征图的,如下图所示:
实际中的图像都是多个通道组成的,我们怎么计算卷积呢?
计算方法如下:当输入有多个通道(channel)时(例如图片可以有 RGB 三个通道),卷积核需要拥有相同的channel数,每个卷积核 channel 与输入层的对应 channel 进行卷积,将每个 channel 的卷积结果按位相加得到最终的 Feature Map
输入层的通道数等于每个卷积核的通道数
如果有多个卷积核时怎么计算呢?当有多个卷积核时,每个卷积核学习到不同的特征,对应产生包含多个 channel 的 Feature Map,例如下图有两个 filter,所以 output 有两个 channel。
卷积核的个数等于输出的通道数
输出特征图的大小与以下参数息息相关:
计算方法如下图所示:
例如,输入特征图为5x5,卷积核为3x3,外加padding 为1,则其输出尺寸为:
如下图所示:
tf.keras.layers.Conv2D(
filters, kernel_size, strides=(1, 1), padding='valid',
activation=None
)
主要参数说明如下:
池化层降低了后续网络层的输入维度,缩减模型大小,提高计算速度,并提高了Feature Map 的鲁棒性,防止过拟合,它主要对卷积层学习到的特征图进行下采样(subsampling)处理,主要由两种。
Max Pooling,取窗口内的最大值作为输出,这种方式使用较广泛。
池化层最大池化的 api 实现如下:
tf.keras.layers.MaxPool2D(
pool_size=(2, 2), strides=None, padding='valid'
)
参数:
Avg Pooling,取窗口内的所有值的均值作为输出
池化层平均池化的 api 实现如下:
tf.keras.layers.AveragePooling2D(
pool_size=(2, 2), strides=None, padding='valid'
)
全连接层位于CNN网络的末端,经过卷积层的特征提取与池化层的降维后,将特征图转换成 一维向量 送入到全连接层中进行分类或回归的操作。
在 tf.keras 中全连接层使用 tf.keras.dense 实现
我们构建卷积神经网络在mnist数据集上进行处理,如下图所示:LeNet-5 是一个较简单的卷积神经网络, 输入的二维图像,先经过两次卷积层,池化层,再经过全连接层,最后使用softmax分类作为输出层。
导入工具包:
import tensorflow as tf
# 数据集
from tensorflow.keras.datasets import mnist
加载数据集:
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
卷积神经网络的输入要求是:N H W C ,分别是图片数量,图片高度,图片宽度和图片的通道,因为是灰度图,通道为1
# 数据处理:n,h,w,c
# 训练集数据
train_images = tf.reshape(train_images, (train_images.shape[0],train_images.shape[1],train_images.shape[2], 1))
print(train_images.shape) # (60000, 28, 28, 1)
# 测试集数据
test_images = tf.reshape(test_images, (test_images.shape[0],test_images.shape[1],test_images.shape[2], 1))
Lenet-5模型输入的二维图像,先经过两次卷积层、池化层,再经过全连接层,最后使用 softmax 分类作为输出层,模型构建如下:
# 模型构建 net = tf.keras.models.Sequential([ # 卷积层:6个5\*5的卷积核,激活是sigmoid tf.keras.layers.Conv2D(filters=6,kernel_size=5,activation='sigmoid',input_shape= (28,28,1)), # 最大池化 tf.keras.layers.MaxPool2D(pool_size=2, strides=2), # 卷积层:16个5\*5的卷积核,激活是sigmoid tf.keras.layers.Conv2D(filters=16,kernel_size=5,activation='sigmoid'), # 最大池化 tf.keras.layers.MaxPool2D(pool_size=2, strides=2), # 维度调整为1维数据 tf.keras.layers.Flatten(), # 全卷积层,激活sigmoid tf.keras.layers.Dense(120,activation='sigmoid'), # 全卷积层,激活sigmoid tf.keras.layers.Dense(84,activation='sigmoid'), # 全卷积层,激活softmax tf.keras.layers.Dense(10,activation='softmax') ])
我们通过 net.summary()
查看网络结构:
Model: "sequential_11" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_4 (Conv2D) (None, 24, 24, 6) 156 _________________________________________________________________ max_pooling2d_4 (MaxPooling2 (None, 12, 12, 6) 0 _________________________________________________________________ conv2d_5 (Conv2D) (None, 8, 8, 16) 2416 _________________________________________________________________ max_pooling2d_5 (MaxPooling2 (None, 4, 4, 16) 0 _________________________________________________________________ flatten_2 (Flatten) (None, 256) 0 _________________________________________________________________ dense_25 (Dense) (None, 120) 30840 _________________________________________________________________ dense_26 (Dense) (None, 84) 10164 dense_27 (Dense) (None, 10) 850 ================================================================= Total params: 44,426 Trainable params: 44,426 Non-trainable params: 0 ______________________________________________________________
关于参数量计算:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
dLx-1715046125424)]
[外链图片转存中…(img-OIFxFpJX-1715046125424)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。