当前位置: 首页 > news >正文

基于CNN的掩码自编码器微调用于分类任务

开源仓库

JJLi0427/CNN_Masked_Autoencoder: Design a patches masked autoencoder by CNN (github.com)icon-default.png?t=N7T8https://github.com/JJLi0427/CNN_Masked_Autoencoder

CNN自编码器

前面的文章中我们模仿MAE的思路用CNN做了一个掩码自编码器

动手小实验,用CNN来构建Maseked Autoencoder_用cnn做编码器和解码器-CSDN博客文章浏览阅读843次,点赞19次,收藏14次。CNN实现带掩码的Autoencoder,利用手写数字数据集做实验_用cnn做编码器和解码器https://blog.csdn.net/lijj0304/article/details/136597791

下游任务

我们的CNN_Masked_Autoencoder是通过手写数字数据集训练的,那我们就继续沿用,拿来做一点改造,实现手写数字的分类

网络架构设计

为了实现比简单的线性分类网络更强的精度,我决定先使用一个Autoencoder来先学习图片的特征。于是这个分类器的构建可以看作是两个阶段的任务,第一个阶段是对掩码图像编码学习还原图像,另外一个阶段是通过预训练编码器编码完整图片信息训练线性分类器。对此我设计的网络结构如下:

图中红色的数据流代表预训练阶段,这个阶段先对输入的图片做随机的掩码,然后用卷积网络对掩码后的图片做卷积,这里面同时调用了残差块,然后再用一个对称的网络对图片做界面,直接解码输出的是还原的图像(这是与MAE设计的一个不同点,原本的MAE输出未被掩码的区域,但是这里用的不是注意力机制,卷积核只能顾及一块的区域,如果只单独输出Patch的话效果会不太好,模型不能很好理解块之间的关系)。还原图像与生成的图像做MSELoss。绿色数据流是分类网络训练阶段,这里调用的是训练好的encoder,其中的参数都是固定的,对encoder的输出展开然后用一个简单的二层线性网络做图片分类预测,这一步分网络是可训练的,这一块利用的是交叉熵损失。

训练和验证

Autoencoder预训练

左图是训练过程中记录的训练和测试的loss,可以发现40epoch过后loss就没有出现明显下降,处于波动状态。右侧图是每过10轮保存一次的还原可视化结果,可以看到后期模型已经可以比较准确还原图片。

微调训练分类网络

使用预训练100个epoch后的encoder做100轮的微调训练。左图是线性分类器训练时的交叉熵,可以看测试的loss到也是20epoch后就趋于平稳。在训练时程序10轮保存一次模型,右侧是每个模型的各项指标。下面的大图是可视化分类器的结果

线性分类器对照实验

制作了一个类似参数量的线性网络,网络直接把每张图片28*28的像素展开然后输入类似架构的三层线性网络(28*28:10:10),输出做预测,训练100个epoch后各项指标对比如下:

Accuracy

Precision

Recall

F1

参数量

带预训练编码器

0.9296

0.9305

0.9296

0.9296

1W

简单线性模型

0.9127

0.9126

0.9127

0.9124

7W

相关文章:

  • JS遍历数组和对象的常用方法有哪些?
  • 千益畅行,旅游卡真相,成本与赋能潜力
  • CSS打印设置页眉页脚
  • #QT(QCharts绘制曲线)
  • Dify vs Langchain:AI应用开发的全面分析
  • abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同时是 synchronized?
  • SpringBoot快速入门-上
  • 用户需求分析揭秘:最佳实践与策略
  • 计算机网络——传输层重要协议(TCP、UDP)
  • ABBYY 15软件下载-ABBYY FineReader 15中文版下载附加详细安装步骤
  • 鸿蒙实现自定义Tabbar样式,显示数字红点提示
  • 什么是LLM?看这一篇就够了!
  • k8s 1.28 搭建rabbitmq集群
  • 充电学习—2、开关电源基本原理
  • 【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】
  • 时间复杂度分析经典问题——最大子序列和
  • 「译」Node.js Streams 基础
  • 【附node操作实例】redis简明入门系列—字符串类型
  • JavaScript服务器推送技术之 WebSocket
  • Mithril.js 入门介绍
  • PAT A1120
  • Protobuf3语言指南
  • sessionStorage和localStorage
  • Swift 中的尾递归和蹦床
  • text-decoration与color属性
  • ViewService——一种保证客户端与服务端同步的方法
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 基于webpack 的 vue 多页架构
  • 计算机常识 - 收藏集 - 掘金
  • 学习JavaScript数据结构与算法 — 树
  • 原生 js 实现移动端 Touch 滑动反弹
  • elasticsearch-head插件安装
  • MyCAT水平分库
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # C++之functional库用法整理
  • ###C语言程序设计-----C语言学习(3)#
  • #14vue3生成表单并跳转到外部地址的方式
  • #vue3 实现前端下载excel文件模板功能
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (16)Reactor的测试——响应式Spring的道法术器
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (31)对象的克隆
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)Sublime Text3配置Lua运行环境
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET C# 操作Neo4j图数据库
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 直连SAP HANA数据库
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数