RNN - RuntimeError: input must have 3 dimensions, got 2
RNN - RuntimeError: input must have 3 dimensions, got 2
我收到以下错误:
RuntimeError: input must have 3 dimensions, got 2
我有一个特征列,我正在尝试将其输入 GRU 神经网络。
下面是我的数据加载器和神经网络。当我检索一批数据时,我还包括了我的数据加载器的输出。
我做错了什么???
def batch_data(feature1, sequence_length, batch_size):
“”"
Batch the neural network data using DataLoader
:param feature1: the single feature column
:param sequence_length: The sequence length of each batch
:param batch_size: The size of each batch; the number of sequences in a batch
:return: DataLoader with batched data
“”"
# total number of batches we can make
n_batches = len(feature1)//batch_size
# Keep only enough characters to make full batches
feature1= feature1[:n_batches * batch_size]
y_len = len(feature1) - sequence_length
x, y = [], []
for idx in range(0, y_len):
idx_end = sequence_length + idx
x_batch = feature1[idx:idx_end]
x.append(x_batch)
# only making predictions after the last item in the batch
batch_y = feature1[idx_end]
y.append(batch_y)
# create tensor datasets
data = TensorDataset(torch.from_numpy(np.asarray(x)), torch.from_numpy(np.asarray(y)))
data_loader = DataLoader(data, shuffle=False, batch_size=batch_size)
# return a dataloader
return data_loader
# test dataloader on subset of actual data
test_text = data_subset_b
t_loader = batch_data(test_text, sequence_length=5, batch_size=10)
data_iter = iter(t_loader)
sample_x, sample_y = data_iter.next()
print(sample_x.shape)
print(sample_x)
print()
print(sample_y.shape)
print(sample_y)
当我传入数据时,生成了以下批次…
torch.Size([10, 5])
tensor([[ 0.0045, 0.0040, -0.0008, 0.0005, -0.0012],
[ 0.0040, -0.0008, 0.0005, -0.0012, 0.0000],
[-0.0008, 0.0005, -0.0012, 0.0000, -0.0015],
[ 0.0005, -0.0012, 0.0000, -0.0015, 0.0008],
[-0.0012, 0.0000, -0.0015, 0.0008, 0.0000],
[ 0.0000, -0.0015, 0.0008, 0.0000, 0.0000],
[-0.0015, 0.0008, 0.0000, 0.0000, -0.0008],
[ 0.0008, 0.0000, 0.0000, -0.0008, -0.0039],
[ 0.0000, 0.0000, -0.0008, -0.0039, -0.0026],
[ 0.0000, -0.0008, -0.0039, -0.0026, -0.0082]], dtype=torch.float64)
torch.Size([10])
tensor([ 0.0000, -0.0015, 0.0008, 0.0000, 0.0000, -0.0008, -0.0039, -0.0026,
-0.0082, 0.0078], dtype=torch.float64)
根据您得到的错误提示,GRU 预期的输入张量形状是三维的,形状为 (batch_size, seq_len, input_size)
1
但是你正在输入一个形状为 (10, 5) 的张量。你说你的输入有一个特征值,所以你应该为 input_size 添加一个大小为 1 的维度。这可以像这样完成
sample_x.unsqueeze(-1)
实际上错误本身会告诉您问题所在。 RNN class 是 GRU 的超级 class,期望输入形状为:
(#batch,#number_of_timesteps,#number_of_features)
所以对于你的案例,你有 1 个特征,5 个时间步长。在您的数据加载器中,您需要将 X 扩展为 (#batch,5,1)。
我收到以下错误:
RuntimeError: input must have 3 dimensions, got 2
我有一个特征列,我正在尝试将其输入 GRU 神经网络。
下面是我的数据加载器和神经网络。当我检索一批数据时,我还包括了我的数据加载器的输出。
我做错了什么???
def batch_data(feature1, sequence_length, batch_size):
“”"
Batch the neural network data using DataLoader
:param feature1: the single feature column
:param sequence_length: The sequence length of each batch
:param batch_size: The size of each batch; the number of sequences in a batch
:return: DataLoader with batched data
“”"
# total number of batches we can make
n_batches = len(feature1)//batch_size
# Keep only enough characters to make full batches
feature1= feature1[:n_batches * batch_size]
y_len = len(feature1) - sequence_length
x, y = [], []
for idx in range(0, y_len):
idx_end = sequence_length + idx
x_batch = feature1[idx:idx_end]
x.append(x_batch)
# only making predictions after the last item in the batch
batch_y = feature1[idx_end]
y.append(batch_y)
# create tensor datasets
data = TensorDataset(torch.from_numpy(np.asarray(x)), torch.from_numpy(np.asarray(y)))
data_loader = DataLoader(data, shuffle=False, batch_size=batch_size)
# return a dataloader
return data_loader
# test dataloader on subset of actual data
test_text = data_subset_b
t_loader = batch_data(test_text, sequence_length=5, batch_size=10)
data_iter = iter(t_loader)
sample_x, sample_y = data_iter.next()
print(sample_x.shape)
print(sample_x)
print()
print(sample_y.shape)
print(sample_y)
当我传入数据时,生成了以下批次…
torch.Size([10, 5])
tensor([[ 0.0045, 0.0040, -0.0008, 0.0005, -0.0012],
[ 0.0040, -0.0008, 0.0005, -0.0012, 0.0000],
[-0.0008, 0.0005, -0.0012, 0.0000, -0.0015],
[ 0.0005, -0.0012, 0.0000, -0.0015, 0.0008],
[-0.0012, 0.0000, -0.0015, 0.0008, 0.0000],
[ 0.0000, -0.0015, 0.0008, 0.0000, 0.0000],
[-0.0015, 0.0008, 0.0000, 0.0000, -0.0008],
[ 0.0008, 0.0000, 0.0000, -0.0008, -0.0039],
[ 0.0000, 0.0000, -0.0008, -0.0039, -0.0026],
[ 0.0000, -0.0008, -0.0039, -0.0026, -0.0082]], dtype=torch.float64)
torch.Size([10])
tensor([ 0.0000, -0.0015, 0.0008, 0.0000, 0.0000, -0.0008, -0.0039, -0.0026,
-0.0082, 0.0078], dtype=torch.float64)
根据您得到的错误提示,GRU 预期的输入张量形状是三维的,形状为 (batch_size, seq_len, input_size)
1
但是你正在输入一个形状为 (10, 5) 的张量。你说你的输入有一个特征值,所以你应该为 input_size 添加一个大小为 1 的维度。这可以像这样完成
sample_x.unsqueeze(-1)
实际上错误本身会告诉您问题所在。 RNN class 是 GRU 的超级 class,期望输入形状为:
(#batch,#number_of_timesteps,#number_of_features)
所以对于你的案例,你有 1 个特征,5 个时间步长。在您的数据加载器中,您需要将 X 扩展为 (#batch,5,1)。