自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(184)
  • 资源 (3)
  • 收藏
  • 关注

原创 基于LSTM的文本分类2——文本数据处理

由于计算机无法认识到文字内容,因此在训练模型时需要将文字映射到计算机能够识别的编码内容。这篇文章的目的就是搞懂上面的代码如何实现,即如何构建文字数据集和迭代器。

2025-04-05 22:37:13 774 1

原创 基于LSTM的文本分类1——模型搭建

经过embedding映射后可以看到,张量out里的数据变成128*32*300的维度,300的维度就是词向量维度,可以看到data里的数据都由原来的整数映射成了向量。由于我们的数据量较小,所以使用较低的词向量维度。另外,如果使用预训练模型,词向量维度的值需要和预训练模型的值相同。全连接的输入通道数是隐藏层维度的两倍,原因是我们的模型是双向的,双向的结果都需要输出给全连接层。前面的汉字部分是模型学习的文本,后面接一个tab键是对该文本的分类。配置的重点是模型的超参数,这里分析一下模型涉及的超参数。

2025-04-01 00:35:25 932

原创 pytorch中dataloader自定义数据集

from PIL import Image # 从PIL库导入Image类"""花朵分类任务数据集类,继承自torch的Dataset类""""""初始化数据集实例Args:root_dir (str): 数据集根目录路径ann_file (str): 标注文件路径transform (callable, optional): 数据预处理变换函数"""# 加载图片路径与标签的映射字典 {文件名: 标签}# 构建完整图片路径列表 [root_dir/文件名1, ...]

2025-03-29 23:51:45 558

原创 基于CNN的FashionMNIST数据集识别6——ResNet模型

在反向传播过程中,梯度通过链式法则逐层传递。对于包含 L 层的网络,第 l 层的梯度计算为:其中 a(k) 表示第 k层的激活值。当多个雅可比矩阵 ∂a(k+1)/∂a(k) 的乘积中出现大量小于1的特征值时(例如使用Sigmoid激活函数),梯度会指数级衰减(‌‌);反之若特征值大于1,则梯度爆炸式增长(‌‌)。实验证明,VGG-19的训练损失曲线在后期趋于平缓,参数更新停滞。网络退化问题通常是过深的网络的表达力下降导致的,原始像素信息需经过所有层的非线性变换,关键特征可能在传递过程中被破坏。

2025-03-23 01:04:19 1034

原创 基于CNN的FashionMNIST数据集识别5——GoogleNet模型

从整个链路上看,googlenet的复杂度相比于之前我们提到的cnn网络更复杂。仔细分析可以看到,googlenet的网络结构里面有多个核心模块inception。搞懂inception就基本搞清楚了googlenet。

2025-03-20 01:05:59 795

原创 基于CNN的FashionMNIST数据集识别4——VGG-16模型

VGG-16 是牛津大学 ‌‌ 在 2014 年提出的经典卷积神经网络模型,发表于论文《Very Deep Convolutional Networks for Large-Scale Image Recognition》。它在 ImageNet 图像分类任务中取得了突破性成绩,核心贡献是证明了 ‌‌ 对模型性能的重要性(当然太深了也不好)。

2025-03-13 00:23:40 354

原创 基于CNN的FashionMNIST数据集识别3——模型验证

和之前训练模型时的验证逻辑基本相同。只进行前向传播,将预测正确的样本个数进行累加。当模型训练完毕后,我们得到的是一组最优的参数配置。在代码运行时,需要将参数载入到模型里,再进行验证。最后要做的就是验证这组参数的表现。

2025-02-24 00:05:42 273

原创 基于CNN的FashionMNIST数据集识别2——模型训练

从代码里可以看出,模型训练代码主要可以分为:数据加载,模型训练,可视化展示。

2025-02-23 14:49:15 697

原创 基于CNN的FashionMNIST数据集识别1——模型搭建与数据准备

我们这次使用LeNet模型,LeNet是一个经典的卷积神经网络(Convolutional Neural Network, CNN)架构,最初由Yann LeCun等人在1998年提出,用于手写数字识别任务创建一个文件model.py。实现以下代码。

2025-02-16 22:35:37 906 5

原创 Fragment学习笔记

静态加载直接注册在布局的xml文件里。需要注意,要指定frament的类型<android:name>和id<android:id>。

2024-08-18 23:23:34 698

原创 Service入门笔记

Service 是 Android 系统中的一种组件,用于在后台执行长时间运行的操作或处理异步任务。Service 可以在不依赖于用户界面的情况下运行,并且可以在应用程序被关闭后继续运行。

2024-08-11 11:25:43 413

原创 android轮播图入门2——触摸停止与指示器

监听轮播图切换轮播视图事件,每次组件切换都遍历一次圆点,将对应当前数据位置的圆点改成选中态。触摸停播的设计思路是:监听实现轮播图的触摸事件,如果用户正在触摸就停止自动轮播。轮播图初始化时,创建数据个数相等的小圆点,默认为未选中状态。

2024-07-06 19:21:24 440

原创 android轮播图入门1——简单无限自动轮播图

自动定时轮播可以通过Handler的延时方式实现,首先要明确,在用户不可见的情况要停止自动轮播,因此要在上屏/移出屏幕时做处理。另外还有一个问题,就是我们希望轮播图一开始可以往左滑动,而不是只能向右滑动,这样可以给用户一种无限循环的感觉。改写getCount方法,返回的数值就是轮播图的组件数量,我们设置为int的最大值,视作无限多。因此在视图初始化时,应该手动给轮播图当前的组件设定一个足够大的值,使得用户可以不断地向左滑。需要注意,设定的值需要是数据数组长度的倍数,这样才能定位到第一个轮播组件。

2024-06-29 20:38:26 677

原创 Installed Build Tools revision xxx is corrupted. Remove and install again 解决

1.在buildTools文件下找到对应的sdk版本,首先将版本对应目录下的d8.bat改名为dx.bat。2.在lib文件下将d8.jar改名为dx.jar。3.重新编译工程即可。

2024-06-29 18:28:19 2511 2

原创 LORA学习笔记3——训练参数

模型训练时ai模型会根据标注生成一个图片,并与学习图片进行对比,通过对比的结果调整嵌入向量。这样的一个流程就被称为“一步”。如果一个训练集中有50张图片,每张图片设定为要训练10次,所以训练完这一组数据集需要50*10=500步。:一个训练集里面的全部图片按照规定的训练次数训练完一次,被称之为训练完“一轮”。参考刚才的例子,500步就是该训练集的一轮所需要的步数。通常我们使用这个概念来控制训练一个模型的总步数。模型训练的总步数=

2024-05-26 20:08:32 2722

原创 FileProvider与apk下载

我们这次把某个apk放在storage下的一个目录下,用一个FileProvider生成uri后,启动一个活动去安装。首先用apk所在的path生成一个uri。这里需要注意,external_path是storage/emulated/0这个目录,这个目录直接写入文件似乎是不可以的(创建文件夹可以),因此我们把apk存放在storage/emulated/0的子目录下,确保不发生权限问题。我们这里自定义了一个FileProvider,单纯继承自安卓提供的基类。

2024-05-26 17:55:51 2701

原创 LORA学习笔记2——训练集处理

对于ai训练来说,处理训练集是模型训练的重要环节。训练集的质量对最终模型的质量影响巨大。这里以二次元角色为例,记录下训练集处理的流程和一些心得。

2024-05-12 22:35:58 1995

原创 Lora训练笔记1——快速上手

AKI大佬的整合包,一键解压即可。提取码:p8uy。

2024-05-05 22:34:09 765

原创 Broadcast入门1

从示例中可以看出,如果仅实现动态注册——监听广播,需要实现的部分如下:1.实现一个receiver,继承自BroadcastReceiver。重写onReceive方法,在里面实现监听到具体广播后的逻辑。2.实例化并注册该receiver,在注册时通过在intentFilter里设置action来指定监听的广播类型。3.在销毁活动时取消注册。否则会导致内存泄漏。该示例展示的是动态注册方法。安卓系统的一些系统级别的广播是要求动态注册的。但是也可以发现动态注册存在的一个问题,就是在程序启动之后才会生效。

2024-04-21 20:36:08 318 1

原创 Activity入门2——生命周期与任务栈

OnCreate:创建一个活动。OnDestroy:销毁一个活动。假设某个用户在一个活动里输入了一些信息,用户由于某些原因退出了该活动,返回时希望能够还原之前输入的信息,不然重新输入就太麻烦了。从以上代码可以看到:onDestroy:在活动销毁时,将用户输入的内容通过持久化的方式存起来。onCreate:在活动创建时,如果已经有持久化存储的内容,就把该内容取出并赋值到输入栏里。

2024-04-05 15:48:43 337

原创 Activity入门1——activity跳转

显式跳转的特点是,intent中包含要跳转过去的组件的.class。通常用于app内部的跳转。

2024-03-31 22:55:35 309

原创 RecyclerView入门

什么是recyclerView?我们常见的可以滑动的,分块的视图样式就可以认为是recyclerView。比如:在开发前还需要了解一些概念:ViewHolder:可以看到recyclerView是以分块的视图形式组织的。分块无论其形状,里面的内容如何,每一个分快称之为ViewHolder。上图中一个title+subtitle的条形分块就是一个ViewHolder。

2024-03-17 19:57:13 889

原创 stable diffusion学习笔记 手部修复

某张图片在生成后,仅有手部表现不符合预期(多指,畸形等)。这种情况下我们通常使用【局部重绘】的方式对该图片的手部进行【图生图】操作,重新绘制手部区域。但是仅采用重绘的方式也很难保证生成的手没有问题。因此这里我们采用【contorlNet】进行辅助,定向生成某种手部的形状。

2024-02-25 20:46:28 5185

原创 stable diffusion学习笔记——高清修复

以上问题说明了,玩ai画图,需要掌握提高画图分辨率的方式,同时要掌握方式对应的技巧,避免出现画面内容的问题。

2024-02-03 21:49:39 2317

原创 stable diffusion学习笔记——文生图(二)

LORA和Embeddings都可以对画面内容进行调整。目前LORA主要用来定义画面特征,如具体的人物,衣物,画风等。Embeddings目前主要用于反面提示词中,用来避免错误的画面表现。

2024-01-28 15:24:55 587

原创 stable diffusion学习笔记——文生图(一)

基本模型也就是常说的checkpoint(大模型),基本模型决定了生成图片的主体风格。如上图所示,基本模型的后缀为.safetensors。需要存放在特定的文件夹下。如果用的是启动器,可以在启动器内直接下载。

2024-01-27 12:42:34 2280

原创 c++函数返回字符串指针

在以上代码中,在函数中创建一个字符数组,直接将字符数组的名称作为char类型的指针作为返回值向外传递。这种做法是错误的,编译器会弹出警告:Address of stack memory associated with local variable 'chp' returned。意思是将在栈上的局部变量返回了,这在c++中是不推荐的。问题的原因在于,testfunc1中的字符数组chp属于局部变量,位于内存的栈区,因此指针*p指向的是栈里的局部变量。

2022-09-22 16:54:39 2475

原创 c++ strcpy相关坑点

strcpy的作用是将一个字符串的内容复制到另外一个字符串中,覆盖原有的内容。常见的例程有:将字符数组里的内容复制到字符数组里。将字符串常量里的内容复制到字符数组里。需要注意的是,在c++中char *p这样的变量是存放在常量区。

2022-09-22 15:31:24 1134

原创 Linux 文件/目录访问(opendir/closedir/readdir)

在Linux系统中我们需要在一个特定目录下对该目录下所有的文件以及目录(文件夹)进行便利访问。Linux获取目录文件的流程如下:1.打开指定目录,使用opendir得到目录句柄。2.while循环中使用readdir获取目录的内容,并存储到struct dirent 结构体变量中。3.dirent结构体变量存储了文件/文件夹的一些属性,可以通过这些属性进行一些差异化操作。4.最后关闭目录句柄closedir。

2022-09-21 16:23:02 2119

原创 c++ 程序中使用命令行

头文件函数原型函数功能popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。如果type是"r"则文件指针连接到command的标准输出,读取命令的标准输出;如果type是"w"则文件指针连接到command的标准输入,写入命令的标准输入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。

2022-09-20 21:05:23 6611

原创 c++ void*讲解

在指针操作中void* 是常用的一种指针,也被称为无类型指针,该指针可以认为是指针类型的一种抽象。

2022-09-16 11:00:11 675

原创 java 低耦合观察者模式

在之前的文章中,虽然被观察者并不依赖于观察者,但是被观察者知道观察者的存在,这就出现了一定程度的耦合关系。我们通常希望一个观察者模式是这样的:1.观察者依赖于被观察者,被观察者不依赖于观察者。2.被观察者最好不知道观察者的存在,既能独立工作,又能减少与观察者的耦合关系。

2022-09-14 17:52:19 553

原创 Android HandlerThread例程

在多线程通信中我们通常使用handler进行异步通信。在线程中使用handler稍微有一些麻烦,比如说创建handler的时候必须保证当前线程中有Looper对象,否则会创建失败。安卓的主线程自带一个Looper,但是我们手动创建的子线程是不会自带Looper对象的,因此我们如果想要在子线程接收信息,也就是在子线程创建handler,就必须在子线程先创建Looper对象,有点麻烦。于是HandlerThread可以解决这个问题,里面内部自带了Looper对象。

2022-09-14 10:57:44 673

原创 Java的synchronized关键字用法

可以自定义一个任意实例对象,实现对代码块的同步。

2022-09-13 16:12:14 278

原创 JNI学习5.jstring的处理

代码中GetStringUTFChars能够得到一个修改后的utf8类型的字符串,将该字符串赋值给需要返回的字符串即可。此外需要ReleaseStringUTFChars对临时创建的char指针进行内存释放。

2022-09-02 15:01:02 2544

原创 Android多线程实现

Android基础的多线程实现方式主要有两种,一种是创建一种线程类并直接继承Thread类,重写其run函数实现线程功能,第二种是实现Runnable接口,通过线程辅助类实现线程功能。

2022-08-17 20:17:35 1588

原创 Android Handler例程(sendMessage与post)

在安卓中,只有主线程才能进行UI操作。说明子线程内无法实现对UI的修改,因此安卓必然支持一种线程通信机制,使得子线程可以发消息让主线程改一下UI,该方案就是handler。安卓中子线程之间也需要通信,通信方案也是handler。......

2022-08-15 16:58:31 2286 1

原创 观察者模式

观察者模式常用于一对多的监听情景,并且被监听者可以实现监听者的回调,也就是说被监听者能够触发监听者的动作,该动作就是回调。观察者模式的特点:1.被观察者不知道具体的观察者是谁,只知道自己被观察了,并且在合适的时机进行广播,让感兴趣的观察者知道发生了什么事情。2.观察者依赖于被观察者,被观察者不依赖于观察者,是单向关系,耦合程度不高。没有被观察者,观察者无法工作;没有观察者,被观察者该干啥干啥,因为被观察者本来就不清楚谁观察他,发广播是被观察的个人行为。......

2022-08-10 21:38:43 1901

原创 EventBus3 笔记

eventbus是安卓开发中常用的消息传递工具,能够有效对发送方与接收方解耦合。

2022-08-10 11:55:04 469

原创 JNI学习4.动态注册

静态注册较为简单,只需要在Java程序中声明jni函数,随后在cpp程序中实现此jni函数即可。静态注册的实现方式为:当java程序第一次使用某个jni函数时,会进行搜索,根据包名-类名-函数名进行搜索,随后与对应的jni函数建立连接,随后便可以调用。由于虚拟机自动实现了注册匹配,所以在实际编写中比较省力,名字匹配了就可以直接用。但是静态注册有一些缺点:1.函数名称需要匹配,不能自定义。2.每个jni函数第一次被调用时都需要搜索,增加了额外开销。如果工程中的jni函数较多,在搜索方面可能会花费较多时间。..

2022-08-04 17:51:58 938

CoinProject.zip

基于QT C++的翻金币小游戏,自己跟着传播智客的教程写的,含源代码和资源文件,代码附有超级详细注释,适合新手学习。

2021-05-12

qt-everywhere-src-5.14.1.tar.xz

QT5.14,官网提供的新版本,可在linux系统中编译安装。不需要去官网低速下载了。同时该版本的QT需要8.3版本的交叉编译工具链才可进行交叉编译,要求较高。

2020-06-30

gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz

gcc-arm-8.3交叉编译工具链,可用于linux系统中程序的交叉编译,版本较高适用于QT。不用去下载了

2020-06-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除