Hi, I am training a network to detect the shorelines in aereal images. The idea of my project is not use the typical convolutional network, and instead of this, I am using an LSTM to process column of the images and then classify them between land (0) and sea (1), to train something similar to a segmentation network.
Right now my network is like this:
class BiLSTM(nn.Module): def __init__(self, input_size, hidden_size, num_classes, num_layers): super(BiLSTM, self).__init__() self.hidden_size = hidden_size self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers, bidirectional=True) self.hidden2line = nn.Linear(603, 603) self.relu = nn.ReLU() self.upsample = nn.Upsample(size=603) def forward(self, input_col): lstm_out, (hn, cn) = self.lstm(input_col.float()) out = self.upsample(lstm_out) out = self.hidden2line(out[:, -1, :]) out = self.relu(out) return out def backward(self, loss): loss.backward()
I feed columns of the image to the LSTM network, then I upsample them to be equal size to the column size, then I use the linear layer, and then a ReLu.
The output of the network is a vector of equal size of the column length, containing 0 or 1, depending of if it is land or sea.
After a few tests, I am getting “pretty good” results after 100 epochs, with a learning rate of 0.001, getting a MSE loss of 0.005 on test dataset.
But I am very newbie to deep learning, and I am seeking ways to improve the network, how can I try to improve the network?
This is an image passed to the network, and the result: