2017-12-22 19 views
0

私は3-D(time_stepinputsizetotal_num)マトリックスのデータセットを持っています。これは.matファイルです。私は5私のコードがあるBATCH_SIZE LSTMのための入力データセットを取得するためにデータローダーを使用するには、次のとおりです。LSTM入力用に3-Dマトリックスを使用してpytorch DataLoaderを使用するにはどうすればよいですか?

file_path = "…/database/frameLength100/notOverlap/a.mat" 
mat_data = s.loadmat(file_path) 
tensor_data = torch.from_numpy(mat_data[‘a’]) #Tensor 

class CustomDataset(Dataset): 

def __init__(self, tensor_data): 
    self.tensor_data = tensor_data 

def __getitem__(self, index): 
    data = self.tensor_data[index] 
    label = 1; 
    return data, label 

def __len__(self): 
    return len(self.tensor_data) 
custom_dataset = CustomDataset(tensor_data=tensor_data) 
train_loader = DataLoader(dataset=custom_dataset, batch_size=5, shuffle=True) 

私はコードが間違っていると思いますが、私はそれを修正する方法は考えています。私が混乱させているのは、DataLoaderでどの次元が 'total_num'であるかをどのようにしてバッチサイズが5のデータセットを得ることができるのかです。

答えて

0

正しく理解すれば、total_numディメンション、私。 e。次元2.

あなたは単にインデックスへのディメンションデータセット、すなわちdata = self.tensor_data[:, :, index]__getitem__を変更し、それに応じて__len__で、self.tensor_data.size(2)代わりのlen(self.tensor_data)を返すことを使用することができます。各バッチのサイズは[time_step, inputsize, 5]になります。

+0

ありがとうございました!あなたの答えは私が必要とするものです。私の混乱は解決されました!しかし、別の問題があります。実際、3次元行列は 'time_step * inputsize * total_num'ではなく 'time_step * total_num * inputsize'である。あなたの提案に従ってコードを修正すると、エラーメッセージが表示されます。 'input.size(-1)はinput_sizeと等しくなければなりません。予想される100、432 'を得た。なぜ3-D行列のinput_sizeが実際に100であるのか分かりません。@nnnmmm –

+0

私はそれを解決しました。 –