- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
为了AIGC的学习,我做了一个基于Transformer Models模型完成GPT2的学生AIGC学习训练模型,指在训练模型中学习编程AI.
在编程之前需要准备一些文件:
首先,先win+R打开运行框,输入:PowerShell后 。
输入:
pip install -U huggingface_hub 。
下载完成后,指定我们的环境变量:
$env:HF_ENDPOINT = "https://hf-mirror.com" 。
然后下载模型:
huggingface-cli download --resume-download gpt2 --local-dir "D:\Pythonxiangmu\PythonandAI\Transformer Models\gpt-2" 。
这边我的目录是我要下载的工程目录地址 。
然后下载数据量:
huggingface-cli download --repo-type dataset --resume-download wikitext --local-dir "D:\Pythonxiangmu\PythonandAI\Transformer Models\gpt-2" 。
这边我的目录是我要下载的工程目录地址 。
所以两个地址记得更改成自己的工程目录下(建议放在创建一个名为gpt-2的文件夹) 。
在PowerShell中下载完这些后,可以开始我们的代码啦 。
import torch
from torch.utils.data import Dataset, DataLoader
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
AdamW,
get_linear_schedule_with_warmup,
set_seed,
)
from torch.optim import AdamW
# 设置随机种子以确保结果可复现
set_seed(42)
class TextDataset(Dataset):
def __init__(self, tokenizer, texts, block_size=128):
self.tokenizer = tokenizer
self.examples = [
self.tokenizer(text, return_tensors="pt", padding='max_length', truncation=True, max_length=block_size) for
text
in texts]
# 在tokenizer初始化后,确保unk_token已设置
print(f"Tokenizer's unk_token: {self.tokenizer.unk_token}, unk_token_id: {self.tokenizer.unk_token_id}")
def __len__(self):
return len(self.examples)
def __getitem__(self, i):
item = self.examples[i]
# 替换所有不在vocab中的token为unk_token_id
for key in item.keys():
item[key] = torch.where(item[key] >= self.tokenizer.vocab_size, self.tokenizer.unk_token_id, item[key])
return item
def train(model, dataloader, optimizer, scheduler, de, tokenizer):
model.train()
for batch in dataloader:
input_ids = batch['input_ids'].to(de)
# 添加日志输出检查input_ids
if torch.any(input_ids >= model.config.vocab_size):
print("Warning: Some input IDs are outside the model's vocabulary.")
print(f"Max input ID: {input_ids.max()}, Vocabulary Size: {model.config.vocab_size}")
attention_mask = batch['attention_mask'].to(de)
labels = input_ids.clone()
labels[labels[:, :] == tokenizer.pad_token_id] = -100
outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
loss = outputs.loss
loss.backward()
optimizer.step()
scheduler.step()
optimizer.zero_grad()
def main():
local_model_path = "D:/Pythonxiangmu/PythonandAI/Transformer Models/gpt-2"
tokenizer = AutoTokenizer.from_pretrained(local_model_path)
# 确保pad_token已经存在于tokenizer中,对于GPT-2,它通常自带pad_token
if tokenizer.pad_token is None:
special_tokens_dict = {'pad_token': '[PAD]'}
tokenizer.add_special_tokens(special_tokens_dict)
model = AutoModelForCausalLM.from_pretrained(local_model_path, pad_token_id=tokenizer.pad_token_id)
else:
model = AutoModelForCausalLM.from_pretrained(local_model_path)
model.to(device)
train_texts = [
"The quick brown fox jumps over the lazy dog.",
"In the midst of chaos, there is also opportunity.",
"To be or not to be, that is the question.",
"Artificial intelligence will reshape our future.",
"Every day is a new opportunity to learn something.",
"Python programming enhances problem-solving skills.",
"The night sky sparkles with countless stars.",
"Music is the universal language of mankind.",
"Exploring the depths of the ocean reveals hidden wonders.",
"A healthy mind resides in a healthy body.",
"Sustainability is key for our planet's survival.",
"Laughter is the shortest distance between two people.",
"Virtual reality opens doors to immersive experiences.",
"The early morning sun brings hope and vitality.",
"Books are portals to different worlds and minds.",
"Innovation distinguishes between a leader and a follower.",
"Nature's beauty can be found in the simplest things.",
"Continuous learning fuels personal growth.",
"The internet connects the world like never before."
# 更多训练文本...
]
dataset = TextDataset(tokenizer, train_texts, block_size=128)
dataloader = DataLoader(dataset, batch_size=4, shuffle=True)
optimizer = AdamW(model.parameters(), lr=5e-5)
total_steps = len(dataloader) * 5 # 假设训练5个epoch
scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=0, num_training_steps=total_steps)
for epoch in range(5): # 训练5个epoch
train(model, dataloader, optimizer, scheduler, device, tokenizer) # 使用正确的变量名dataloader并传递tokenizer
# 保存微调后的模型
model.save_pretrained("path/to/save/fine-tuned_model")
tokenizer.save_pretrained("path/to/save/fine-tuned_tokenizer")
if __name__ == "__main__":
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
main()
这个代码只训练了5个epoch,有一些实例文本,记得调成直接的路径后,运行即可啦.
如果有什么问题可以随时在评论区或者是发个人邮箱:linyuanda@linyuanda.com 。
最后此篇关于[Python急救站]基于TransformerModels模型完成GPT2的学生AIGC学习训练模型的文章就讲到这里了,如果你想了解更多关于[Python急救站]基于TransformerModels模型完成GPT2的学生AIGC学习训练模型的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
real adaboost Logit boost discrete adaboost 和 gentle adaboost in train cascade parameter 有什么区别.. -bt
我想为 book crossing 构建训练数据矩阵和测试数据矩阵数据集。但作为 ISBN 代码的图书 ID 可能包含字符。因此,我无法应用此代码(来自 tutorial ): #Create two
我找到了 JavaANPR 库,我想对其进行自定义以读取我所在国家/地区的车牌。 似乎包含的字母表与我们使用的字母表不同 ( http://en.wikipedia.org/wiki/FE-Schri
我有一个信用卡数据集,其中 98% 的交易是非欺诈交易,2% 是欺诈交易。 我一直在尝试在训练和测试拆分之前对多数类别进行欠采样,并在测试集上获得非常好的召回率和精度。 当我仅在训练集上进行欠采样并在
我打算: 在数据集上从头开始训练 NASNet 只重新训练 NASNet 的最后一层(迁移学习) 并比较它们的相对性能。从文档中我看到: keras.applications.nasnet.NASNe
我正在训练用于分割的 uNet 模型。训练模型后,输出全为零,我不明白为什么。 我看到建议我应该使用特定的损失函数,所以我使用了 dice 损失函数。这是因为黑色区域 (0) 比白色区域 (1) 大得
我想为新角色训练我现有的 tesseract 模型。我已经尝试过 上的教程 https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesser
我的机器中有两个 NVidia GPU,但我没有使用它们。 我的机器上运行了三个神经网络训练。当我尝试运行第四个时,脚本出现以下错误: my_user@my_machine:~/my_project/
我想在python的tensorflow中使用稀疏张量进行训练。我找到了很多代码如何做到这一点,但没有一个有效。 这里有一个示例代码来说明我的意思,它会抛出一个错误: import numpy as
我正在训练一个 keras 模型,它的最后一层是单个 sigmoid单元: output = Dense(units=1, activation='sigmoid') 我正在用一些训练数据训练这个模型
所以我需要使用我自己的数据集重新训练 Tiny YOLO。我正在使用的模型可以在这里找到:keras-yolo3 . 我开始训练并遇到多个优化器错误,添加了错误代码以防止混淆。 我注意到即使它应该使用
将 BERT 模型中的标记化范式更改为其他东西是否有意义?也许只是一个简单的单词标记化或字符级标记化? 最佳答案 这是论文“CharacterBERT: Reconciling ELMo and BE
假设我有一个非常简单的神经网络,比如多层感知器。对于每一层,激活函数都是 sigmoid 并且网络是全连接的。 在 TensorFlow 中,这可能是这样定义的: sess = tf.Inte
有没有办法在 PyBrain 中保存和恢复经过训练的神经网络,这样我每次运行脚本时都不必重新训练它? 最佳答案 PyBrain 的神经网络可以使用 python 内置的 pickle/cPickle
我尝试使用 Keras 训练一个对手写数字进行分类的 CNN 模型,但训练的准确度很低(低于 10%)并且误差很大。我尝试了一个简单的神经网络,但没有效果。 这是我的代码。 import tensor
我在 Windows 7 64 位上使用 tesseract 3.0.1。我用一种新语言训练图书馆。 我的示例数据间隔非常好。当我为每个角色的盒子定义坐标时,盒子紧贴角色有多重要?我使用其中一个插件,
如何对由 dropout 产生的许多变薄层进行平均?在测试阶段要使用哪些权重?我真的很困惑这个。因为每个变薄的层都会学习一组不同的权重。那么反向传播是为每个细化网络单独完成的吗?这些细化网络之间的权重
我尝试训练超正方语言。我正在使用 Tess4J 进行 OCR 处理。我使用jTessBoxEditor和SerakTesseractTrainer进行训练操作。准备好训练数据后,我将其放在 Tesse
我正在构建一个 Keras 模型,将数据分类为 3000 个不同的类别,我的训练数据由大量样本组成,因此在用一种热编码对训练输出进行编码后,数据非常大(item_count * 3000 * 的大小)
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!