RuntimeError: mat1 and mat2 must have the same dtype, but got Long and Float

This code attempts to train a neural network that converts one paragraph (input) into another (output), but I keep running into this same error.

class CharPredictor(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size):
        super(CharPredictor, self).__init__()
        self.rnn = nn.LSTM(input_size, hidden_size, num_layers)
        self.fc = nn.Linear(hidden_size, output_size)
    
    def forward(self, x):
        # x = nn.functional.one_hot(x, num_classes=input_size).float()
        # x = x.transpose(0, 1)
        outputs, _ = self.rnn(x)
        prediction = self.fc(outputs[:, -1, :])
        return prediction

seq_length = 100

with open(input_filename, "r") as file:
    input_text = file.read()
input_chars = sorted(set(input_text))
input_char_to_index = {c: i for i, c in enumerate(input_chars)}
sequences = [[input_char_to_index[char] for char in input_text[i:i + seq_length]] for i in range(0, len(input_text) - seq_length, seq_length)]
sequences = torch.tensor(sequences)#.long()
# input_one_hot = nn.functional.one_hot(sequences, num_classes=len(input_chars))

with open(output_filename, "r") as file:
    output_text = file.read()
output_chars = sorted(set(output_text))
output_index_to_char = {c: i for i, c in enumerate(output_chars)}
labels = [output_index_to_char[char] for char in output_text[seq_length:]]
labels = torch.tensor(labels)#.long()
# output_one_hot = nn.functional.one_hot(labels, num_classes=len(output_chars))

input_size = len(input_chars)
hidden_size = 128
num_layers = 2
output_size = len(output_chars)

model = CharPredictor(input_size, hidden_size, num_layers, output_size)
optimizer = torch.optim.Adam(model.parameters())
criterion = nn.CrossEntropyLoss()

losses = []

for epoch in range(10):
    for i in range(len(sequences)):
        optimizer.zero_grad()
        prediction = model(sequences[i].unsqueeze(0))
        loss = criterion(prediction, labels[i])
        loss.backward()
        optimizer.step()

        losses.append(loss.item())

You probably want to add an nn.Embedding layer to map your character indices to vector representation of type Float.