You do not need to store the values in one array. You can simply return a tuple. This will avoid the inplace operations in species_length
in your forward function you can write:
def forward(self, x):
        x = self.features(x)
        x = x.view(-1,self.num_ftrs )
        if False:
            x = F.relu(self.class_fc1(x))
            species = self.class_fc2(x)
            species = nn.LogSoftmax()(species)
            length = self.reg_fc2(x)
            # species_length = (species, length)
            return species, length
        else:
            species_length = F.relu(self.class_fc1(x))
            species_length = self.class_fc2(species_length)
            # species_length[:8] = nn.LogSoftmax()(species_length[:8])
            species_length = nn.LogSoftmax()(species_length)
            # species_length[8]  = F.relu(species_length[8])
            #length  = F.relu(self.reg_fc1(x))
            #length  = F.relu(self.reg_fc2(length))
            return species_length, F.relu(species_length[8])