训练模型的方法有多种,以下为您介绍几种常见的训练模型方式:
原始形象:MJ初步产出符合设计想法的贴纸原始形象二次加工:完成贴纸的白色边线等细节加工处理素材:给训练集图片打tag,修改tag训练模型:将上述处理好的数据集做成训练集,进行训练
选择Baichuan2-7B-Chat模型作为底模,配置模型本地路径,配置提示模板Train页面里,选择sft训练方式,加载定义好的数据集wechat和self_cognition。其中学习率和训练轮次非常重要,根据自己的数据集大小和收敛情况来设置,使用FlashAttention-2则可以减少显存需求,加速训练速度;显存小的朋友可以减少batch size和开启量化训练,内置的QLora训练方式非常好用。需要用到xformers的依赖具体命令参数如下:显存占用20G左右,耐心等待一段时间,请神模式开启...根据聊天记录规模大小,少则要几小时,多则几天,一个虚拟助手就能训练完成了。专不专业还有待大量标准问答验证,只是口气和习惯的模仿是有点意思的,若再加上[《克隆自己的声音——赛博分身必备技能》](http://mp.weixin.qq.com/s?__biz=MzI0MzA4NDkwMw==&mid=2247492147&idx=1&sn=efacb40a6c5610b6ed7368ba1d043f13&chksm=e970d93bde07502df2ff09ae3e700923ae285c21c7151282870d9e1db309da07ee5a49f609ed&scene=21#wechat_redirect)的效果,那几乎就传神了。不过这里还有很多细节工作需要完善:
在我们训练模型之前,我们需要一个损失函数。由于这本质上是一个多类分类问题(每个可能的下一个字符是一个类),因此损失将是稀疏的分类交叉熵损失。我们配置这个损失是从logits(不是直接的概率)计算的。一旦我们有了损失,我们就可以编译我们的模型,这意味着我们将损失和优化器联系在一起。优化器将在训练期间更新权重以尽可能减少损失。最后,我们开始训练模型。我们选择了一些我们想要进行训练的时期。一个时期是对数据集的完整传递。我们在这里进行了多次训练,并提供了回调以确保在训练期间保存权重。首先,我们需要从实际的字符串中提取字符序列。为了做到这一点,我们可以使用TensorFlow的TF字符串Unicode拆分功能。例如,此时文本已经被转换为字符序列列表。但是,神经网络不能直接处理这些字符序列。因此,我们需要将这些字符序列转化为数字。为了将每个字符映射到给定的ID,我们可以使用TF Keras层中的StringLookup函数。您只需要将您的词汇表传递给这个函数。在我们的例子中,语料库包含65个独特的字符。我们生成一个层,当字符通过这个层时,它将生成相应的ID。在这个层中,你会有一个从字符到ID的映射。要获得反向映射(即从ID到字符的映射),您可以使用同一层的StringLookup函数,但需要将参数invert设置为True。现在让我们将这些处理后的数据作为神经网络的训练数据集。为此,我们使用TF Data Dataset API。这个API有一个优秀的方法,可以将整个戏剧文本语料库(它代表了大量的实例)作为ID存储,以便获取一个数据集。