Я пытаюсь построить модель на основе недавней статьи Google, которая называется «Масштабируемое и точное глубокое обучение для электронных медицинских карт».В документе описывается, как встраивать медицинские данные для последующих задач прогнозирования.
В дополнительном материале есть раздел, описывающий, как встраивать медицинские данные, выполняя следующие действия (рис. Также прилагается ниже):
1) Возьмите необработанные медицинские данные по каждому пациенту за шаг по времени и вставьте их (например, как это делается в вложениях слов)
2) Объедините всю историю этого пациента за этот временной шаг вместе в длинный вектор
2a) Для нескольких данных одного и того же типа усредните вложения с использованием усвоенного веса
3) Создайте еще один вектор, содержащий информацию о времени (в секундах)
Я довольно новичок в LSTM, но я нашел некоторый код, который я хотел изменить, чтобы получить вложения и информацию о времени:
class LSTMClassifier(nn.Module):
def __init__(self, embedding_dim, hidden_dim, vocab_size, label_size):
super(LSTMClassifier, self).__init__()
self.hidden_dim = hidden_dim
self.embeddings = nn.Embedding(vocab_size, embedding_dim)
self.lstm = nn.LSTM(embedding_dim, hidden_dim)
self.hidden2label = nn.Linear(hidden_dim, label_size)
self.hidden = self.init_hidden()
def init_hidden(self):
# the first is the hidden h
# the second is the cell c
return (autograd.Variable(torch.zeros(1, 1, self.hidden_dim)),
autograd.Variable(torch.zeros(1, 1, self.hidden_dim)))
def forward(self, sentence):
embeds = self.embeddings(sentence)
x = embeds.view(len(sentence), 1, -1)
lstm_out, self.hidden = self.lstm(x, self.hidden)
y = self.hidden2label(lstm_out[-1])
log_probs = F.log_softmax(y)
return log_probs
Наконец, в дополнительномВ материале говорится, что:
Последовательность вложений была дополнительно сокращена до более короткой последовательности.Как правило, более короткие последовательности делятся на временные шаги по 12 часов, где вложения для всех признаков в категории в один и тот же день объединяются с использованием взвешенного усреднения.Взвешенное усреднение выполняется путем связывания каждого признака с неотрицательным весом, который тренируется совместно с моделью.Эти веса также используются для атрибуции прогноза.Лог средней дельты времени, деленный на коэффициент (управляемый гиперпараметром) на каждом временном шаге, также внедряется в небольшой вектор с плавающей запятой (который также произвольно инициализируется) и объединяется с входным вложением в каждый момент времени.step.
Мой общий вопрос: как мне на самом деле вставить этот вектор времени?
Я смущен, потому что говорится, что последовательности были разбиты на 12-часовые временные шаги.Если это так, то зачем нужен вектор времени?Затем в последующем говорится, что вы можете просто объединить вектор времени для вложения.Почему бы простой конкатенации, как эта работа и как модель узнает, чтобы связать эту информацию времени с соответствующей частью ввода?Фактическое орудие как бы потеряно для меня, поэтому мы будем благодарны за любые рекомендации!