# Sampling from Surnames¶

In this exercise, you will be writing the sampler for the surname model.

What is required for this model is the following:

- An initial input
- An initial hidden
- A loop which uses these two things to get the next hidden

For creating the initial hidden and input vectors, we make use of the Vocabularies.

```
begin_seq_index = vectorizer.surname_vocab.begin_seq_index
index_0 = Variable(torch.LongTensor([begin_seq_index]))
x_0 = model.char_emb(index_0)
nationality_index = vectorizer.nationality_vocab.lookup_index('Irish')
hidden_0_index = Variable(torch.LongTensor([nationality_index]))
hidden_0 = model.nat_emb(hidden_0_index)
```

Now, the goal is to use these input and hidden vectors to compute the next hidden vector.

```
rnn_cell = model.rnn.rnn_cell
hidden_1 = rnn_cell(x_0, hidden_0)
fc = self.model.fc
relu = self.model.relu
y_0 = fc(relu(hidden_1))
y_0 = F.softmax(y_t, dim=1)
# sample
index_1 = torch.multinomial(y_t, 1)[:, 0]
# or argmax
# index_1 = torch.max(y_t, dim=1)[1]
```

What’s left: write a loop that performs these computations, aggregates the indices, and outputs them. Additionally, you will have to use the vocab to lookup each index.