I’m trying to get a RNN to predict the next value in a sequence. How can I resolve the error message below?
import torch
import torch.nn as nn
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
The data I am using is imported from a CSV. Instead of using the actual data in this post, I’ve created dummy data that is the same data type (np.float64), as the data I’m using. I think the data’s type might be the source of the problem. I’ve tried altering it but keep getting the same error message.
# create random data that mimics actual data I am using
sampl = np.random.uniform(low=-3, high=3, size=(50,))
sampl.astype(np.float64)
# define seq length
seq_length = 10
data_x = sampl.copy()
# number of sequences w/i data
n_seq = len(data_x)//seq_length
# only keep enough data to make full sequences
data_x = data_x[:n_seq * seq_length]
# Number of input data we can have
nbr_input = len(data_x[:-seq_length])
# create feature data and target data
features = []
targets = []
# create data one seq at a time
for i in range(nbr_input):
features.append(data_x[i:i+seq_length])
targets.append(data_x[i+seq_length])
# convert data into pytorch tensors
feature_tensor = torch.from_numpy(np.array(features))
target_tensor = torch.from_numpy(np.array(targets))
# add a last dimension so that data is (batch_size, seq_length, features)
feature_tensor = feature_tensor.unsqueeze(-1)
target_tensor = target_tensor.unsqueeze(-1)
# DEFINE THE RNN
class RNN(nn.Module):
def __init__(self, input_size, output_size, hidden_dim, n_layers):
super(RNN, self).__init__()
self.hidden_dim=hidden_dim
self.rnn = nn.RNN(input_size, hidden_dim, n_layers, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_size)
def forward(self, x, hidden):
batch_size = x.size(0)
r_out, hidden = self.rnn(x, hidden)
r_out = r_out.view(-1, self.hidden_dim)
output = self.fc(r_out)
return output, hidden
# test that dimensions of the model are as expected
test_rnn = RNN(input_size=1, output_size=1, hidden_dim=32, n_layers=2)
print(test_rnn)
print('Input size: ', feature_tensor.size())
# test out rnn sizes
test_out, test_h = test_rnn(feature_tensor, None)
print('Output size: ', test_out.size())
print('Hidden state size: ', test_h.size())
Input size: torch.Size([40, 10, 1])
RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #3 ‘mat2’ in call to _th_addmm_out