[青少年CTF擂台挑战赛 2024 #Round] Misc 1ez_model
题目描述:从Pytorch开始的AI之路
下载附件,是一个pth文件
.pth
文件通常是 PyTorch 模型的权重文件,它包含了模型的参数。要还原(或加载)一个大模型,你需要进行以下几个步骤:
-
安装 PyTorch:确保你的环境中安装了 PyTorch。可以通过运行
pip install torch
来安装。 -
定义模型结构:在加载
.pth
文件之前,你需要定义与训练时相同的模型结构。这意味着你需要知道模型的架构,并在代码中定义它。 -
加载权重:一旦定义了模型结构,你可以使用
torch.load()
方法加载.pth
文件中的权重,并使用load_state_dict()
方法将权重应用到你定义的模型结构上。
示例代码:
import torch
import torch.nn as nn
# 假设我们有一个简单的模型
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.conv1 = nn.Conv2d(1, 20, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(20, 50, 5)
self.fc1 = nn.Linear(50 * 4 * 4, 500)
self.fc2 = nn.Linear(500, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 50 * 4 * 4)
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
# 创建模型实例
model = SimpleModel()
# 加载预训练的权重
model.load_state_dict(torch.load('path_to_your_model.pth'))
# 将模型设置为评估模式
model.eval()
这个例子展示了一个非常简单的模型结构。实际使用时,你需要根据你的 .pth
文件对应的模型架构来定义模型。
请注意,如果 .pth
文件是使用 torch.save()
保存的整个模型(而不仅仅是模型的 state_dict
),则可以直接使用 torch.load()
来加载整个模型,无需先定义模型结构。但是,推荐的做法是仅保存和加载模型的 state_dict
,因为这种方式更加灵活且与模型代码解耦。
开始做题,我们学彭总的做法,首先看键值
import torch
import torchvision.models as models
#loaded_data = torch.load('easy.pth', torch.device('cpu')) #设置在cpu环境下查询
loaded_data = torch.load('easy.pth')
print(loaded_data.keys())
键中有flag,想办法拿出来。
import torch
import torchvision.models as models
#loaded_data = torch.load('easy.pth', torch.device('cpu')) #设置在cpu环境下查询
loaded_data = torch.load('easy.pth')
hint_value = loaded_data['hint']
print(hint_value)
flag_value = loaded_data['flag']
print(flag_value)
应该是ASCII,直接gpt解码。
第一个tensor解码结果:ZzYyXxAaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWw0123456789+/
第二个tensor解码结果:LidUJ3fQM2FVJoxpDwLvDyF3DwpPdwxOEgbQJoxnEgdnJgnojoZ5mF
应该是边表base64,第二个是加密字符串,第一个是表。