Hello. I am having trouble over a small piece of code.
import torch
import torch.nn as nn
import math
class Segmentation(torch.nn.Module):
def __init__(self, input, hidden, output, layers, bidirectional, kernal, dropout_prob):
super().__init__()
assert(kernal[0]%2==1 and kernal[1]%2==1), 'Convolution kernal sizes should be odd for keeping same dimensions.'
padding = (math.floor(kernal[0]/2), math.floor(kernal[1]/2))
# cnn input = [N * C * H * W] H=time, W=Frequency
self.conv_1 = nn.Conv2d(1, 1, kernel_size=kernal, padding=padding)
self.mp_1 = nn.MaxPool2d(kernel_size=kernal, stride=1, padding=padding)
self.conv_2 = nn.Conv2d(1, 1, kernel_size=kernal, padding=padding)
self.mp_2 = nn.MaxPool2d(kernel_size=kernal, stride=1, padding=padding)
self.dropout = nn.Dropout(p=dropout_prob)
self.gru = nn.GRU(input, hidden, num_layers=layers,
dropout=dropout_prob, bidirectional=bidirectional, batch_first=True)
in_features = hidden*2 if bidirectional else hidden
self.linear = nn.Linear(in_features=in_features, out_features=output)
self.log_softmax = nn.LogSoftmax(dim=-1)
def forward(self, input, input_lens):
# inputs must be length wise sorted
# input is already padded
input = self.mp_1(self.conv_1(input))
input = self.mp_2(self.conv_2(input))
input = self.dropout(input)
# now pack the sequences.
# input -> [batch, ch=1, height=time, width=frequency]
input = input.squeeze(1)
packed_input = nn.utils.rnn.pack_padded_sequence(input, input_lens, batch_first=True)
packed_output, _ = self.gru(packed_input)
output, _ = nn.utils.rnn.pad_packed_sequence(packed_output, batch_first=True)
output = self.linear(output)
return output
The problem occurs on line 39 packed_output, _ = self.gru(packed_input)
. After the tesnor is passed to the gru layer, the system just freezes. I didn’t understand what was happening at first. Then I opened the debugger and system monitor and found that after coming to this line, the RAM consumption starts increasing. My RAM is 8GB and the programme alone consumes more than 7 GB, which is really weird, and therefore the system crushes. Every time I run this script, I had to force restart my machine. I tried googling the issue, NO LUCK!
the input to the self.gru(packed_input
is a packed sequence.
The only reason I can think of this kind of behavior is an infinite for loop. But How can that happen on the forward layer of a built in library?
Or can it?