mamba
NLP相关 seq2seq架构: 主要特征:编码器,潜空间,解码器,输入输出都是序列 CV相关 s4通过离散化过程 将参数转化为全局卷积核(Global Convolution Kernel)。这使得 S4 可以像 CNN 一样在整个序列上进行高效并行训练 。而在推理(生成)阶段,它又可以切换回递归模式
NLP相关 seq2seq架构: 主要特征:编码器,潜空间,解码器,输入输出都是序列 CV相关 s4通过离散化过程 将参数转化为全局卷积核(Global Convolution Kernel)。这使得 S4 可以像 CNN 一样在整个序列上进行高效并行训练 。而在推理(生成)阶段,它又可以切换回递归模式
VGG16 结构 使用TensorFlows实现 def VGG16(input_shape=(224,224,3)): model = keras.Sequential([ keras.Input(shape=input_shape), layers.Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), #这里不same,则尺寸减半 layers.Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Flatten(),#展平 layers.Dense(units=4096, activation='relu'), layers.Dense(units=4096, activation='relu'), layers.Dense(units=4096, activation='softmax') ]) model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'] ) return model 在猫、狗二分类数据集上进行训练,测试,这里我们使用的是内置的预训练好的VGG16,进行微调即可 我们去掉了预训练的输出层(3个全连接层) 原vgg16 处理后的vgg16 # 设置测试集,训练集目录 test_dir="../input/dogs-cats-images/dog vs cat/dataset/test_set"train_dir="../input/dogs-cats-images/dog vs cat/dataset/training_set" train_dir_cats = train_dir + '/cats' train_dir_dogs = train_dir + '/dogs' test_dir_cats = test_dir + '/cats' test_dir_dogs = test_dir + '/dogs' # Preview first few images展示前6张图片 preview_cats = ["/cat.1.jpg", "/cat.10.jpg", "/cat.100.jpg", "/cat.1000.jpg", "/cat.1001.jpg", "/cat.1002.jpg"] preview_dogs = ["/dog.1.jpg", "/dog.10.jpg", "/dog.100.jpg", "/dog.1000.jpg", "/dog.1001.jpg", "/dog.1002.jpg"] print('Cats') plt.figure(figsize=(10,8)) #10,8 英寸 for i in range(6): im_cat = load_img(train_dir_cats + preview_cats[i]) plt.subplot(2, 3, i+1) #展示几行 每行展示几列 i+1 为图所在的子网格位置 plt.imshow(im_cat) plt.axis('off') plt.show() print('Dogs') plt.figure(figsize=(10,8)) for i in range(6): im_dog = load_img(train_dir_dogs + preview_dogs[i]) ax = plt.subplot(1, 6, i+1) plt.imshow(im_dog) plt.axis('off')#关闭当前子图的坐标轴、刻度和标签 plt.show() 数据加载: ImageDataGenerator 配合 flow_from_directory 方法,自动完成了将 ‘Cat’ 和 ‘Dog’ 文件夹名称转换为数字标签 0 和 1 的过程。 ...
主要介绍LeNet 与 AlexNet,还 涉及到dropout, maxpooling, relu等概念 In this notebook we will motivate and implement from scratch two Convolutional Neural Networks (CNNs) that had big impacts on the field of Deep Learning. Namely, we will look at LeNet-5 (Yann LeCunn et al., 1989), which is considered one of the first CNNs ever and also AlexNet (Alex Krizhevsky et al., 2012), which won the 2012 ImageNet competition by an impressive marging and introduced many techniques that are considered state of the art even today (e.g. dropout, maxpooling, relu, etc). ...
图片基础 一个图片通常表现为3维矩阵,长、宽、通道,其中长*宽构成了分辨率,而有多少个通道就相当于有多少个"调色板"页面,这些调色板共同构成了每个像素点的色彩。 eg:1080p的rgb图片,就是1920*1080,通道数为3,其中rgb分别可取(0-255);而单通道就是灰度图像,取值(0-255) CNN CNN【卷积 → 激活 → 池化】 视为一个基础块,其中卷积层的每一个卷积核(滤波器)都可以提取一个特征,而激活层的Re-LU可以将卷积后此特征不明显的值设为0,再经过池化层,保留更为显著的特征(从“精确位置”到“空间存在”)。 随着多层的卷积输出,通道数增加,长、宽降低,而通道意义也变为了不同特征的强弱分布,有多少种通道就对应着多少种特征; 池化操作减少特征图中 参数数量、保留显著特征,只描述哪一个区域有,而不用具体到点。 经过一些列的卷积、激活、池化操作,最终得到长、宽小,而通道数大的特征图 ,经过全连接,输出一个1*n的向量,其中n为分类的数量。 卷积操作 整个卷积层的输出是N张特征图堆叠在一起,形成一个新的三维张量。 输出形状: [新高度, 新宽度, 卷积核数量] 例如: [222, 222, 32] (使用了32个3x3卷积核,尺寸略有缩小)。 此时,张量发生了变化:通道数从原始的3(R,G,B)变成了32,这32个通道不再是颜色,而是32种不同的基础特征的强度分布图。 整体流程 CNN演变 这里我的描述的网络是去掉了全连接层的CNN FCN FCN做出的重要改变是将CNN中全连接换为解码器,保留了原有CNN中的编码器(卷积+池化),这样,原有的CNN用于分类的一维输出,就变为了 “一个高分辨率的、与输入尺寸对应的像素级分类图”。 跳跃连接 编码器中,越浅的层次,图片分辨率更高位置更精细,越深的层次,图片的分辨率更低,but语义信息丰富(知道“这是什么”,但不知道在哪) 在ResNet中的应用 flowchart TD subgraph A [编码器 - 卷积与下采样] direction TB A1[输入图像<br>HxWx3] --> A2[卷积与池化<br>H/2 x W/2 x 64] --> A3[卷积与池化<br>H/4 x W/4 x 128] --> A4[卷积与池化<br>H/8 x W/8 x 256] --> A5[卷积与池化<br>H/16 x W/16 x 512] --> A6[卷积与池化<br>H/32 x W/32 x 1024] end subgraph B [解码器 - 上采样与跳跃融合] direction TB B1[预测层<br>H/32 x W/32 x N] -- 2x上采样 --> B2[score pool4<br>H/16 x W/16 x N] A4 -- 跳跃连接1 --> C1[1x1 卷积<br>H/8 x W/8 x 256] -- 1x1 卷积 --> C2[score pool3<br>H/8 x W/8 x N] B2 -- 与 score pool3 相加 --> B3[融合特征<br>H/8 x W/8 x N] -- 8x上采样 --> B4[最终输出<br>H x W x N] end A6 -- 核心改变: <br>全连接层 -> 卷积层 --> B1 A5 -- 跳跃连接2 --> B2 反卷积(转置卷积) 解码器中用于还原图像到输出大小的部分。 ...