Spaces:
Sleeping
Sleeping
import torch | |
from torch import nn | |
from transformers import AutoModel | |
class MyTinyBERT(nn.Module): | |
def __init__(self): | |
super().__init__() | |
self.bert = AutoModel.from_pretrained("cointegrated/rubert-tiny2") | |
for param in self.bert.parameters(): | |
param.requires_grad = True | |
# Разморозка последних слоёв | |
for name, param in self.bert.named_parameters(): | |
if any(layer in name for layer in ['layer.7', 'layer.8', 'layer.9', 'layer.10', 'layer.11']): | |
param.requires_grad = True | |
self.linear = nn.Sequential( | |
nn.Linear(312, 256), | |
nn.ReLU(), | |
nn.Dropout(0.3), | |
nn.Linear(256, 10)) # Для 10 классов | |
def forward(self, input_dict): | |
# Ожидается словарь с ключами "input_ids" и "attention_mask" | |
bert_out = self.bert(**input_dict) | |
# Используем скрытое состояние для [CLS] токена | |
normed_bert_out = nn.functional.normalize(bert_out.last_hidden_state[:, 0, :]) | |
return self.linear(normed_bert_out) | |