PyTorch FeatureEmbedder 类实现解析
概述
这段 Python 代码定义了一个名为 FeatureEmbedder 的类,它继承自 PyTorch 的 nn.Module。这个类是一个自定义的神经网络模块,用于从电子健康记录(EHR)中嵌入不同类型的特征。
代码实现
import math
import torch
from torch import nn
from utils import get_extended_attention_mask
class FeatureEmbedder(nn.Module):
def __init__(self, args):
super().__init__()
self.embeddings = {}
self.feature_keys = args.feature_keys
self.dx_embeddings = nn.Embedding(args.vocab_sizes['dx_ints']+1, args.hidden_size, padding_idx=args.vocab_sizes['dx_ints'])
self.proc_embeddings = nn.Embedding(args.vocab_sizes['proc_ints']+1, args.hidden_size, padding_idx=args.vocab_sizes['proc_ints'])
self.visit_embeddings = nn.Embedding(1, args.hidden_size)
self.layernorm = nn.LayerNorm(args.hidden_size)
self.dropout = nn.Dropout(args.hidden_dropout_prob)
def forward(self, features):
batch_size = features[self.feature_keys[0]].shape[0]
embeddings = {}
masks = {}
embeddings['dx_ints'] = self.dx_embeddings(features['dx_ints'])
embeddings[] = .proc_embeddings(features[])
device = features[].device
embeddings[] = .visit_embeddings(torch.tensor([]).to(device))
embeddings[] = embeddings[].unsqueeze().expand(batch_size,-,-)
masks[] = torch.ones(batch_size,).to(device)
name, embedding embeddings.items():
embeddings[name] = .layernorm(embedding)
embeddings[name] = .dropout(embeddings[name])
embeddings, masks

