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())