Hello,
I am a begginer of pytorch programming. And I am trying to write RNN codes using pytorch. I want to reach training loss less than 3.5. But my loss is near 9. Would you help me to solve this problem. I attach my code below. I appreciate any help.
def forward_back_prop(rnn, optimizer, criterion, inp, target, hidden):
“”"
Forward and backward propagation on the neural network
:param decoder: The PyTorch Module that holds the neural network
:param decoder_optimizer: The PyTorch optimizer for the neural network
:param criterion: The PyTorch loss function
:param inp: A batch of input to the neural network
:param target: The target output for the batch of input
:return: The loss and the latest hidden state Tensor
“”"
train_loss = 0.0
step = 0
print_every = 40
for i in range(print_every):
    step += 1
    if train_on_gpu:
        inp, target = inp.cuda(), target.cuda()
    
    hidden = tuple([each.data for each in hidden])
    
    rnn.zero_grad() 
    
    output, hidden = rnn(inp, hidden)
      
    loss = criterion(output, target)

    loss.backward()
    
    nn.utils.clip_grad_norm_(rnn.parameters(), 5)

    optimizer.step()

    train_loss += loss.item()
    
    if step == print_every:   
        return train_loss/print_every, hidden

def train_rnn(rnn, batch_size, optimizer, criterion, n_epochs, show_every_n_batches=1):
batch_losses = []
rnn.train()

print("Training for %d epoch(s)..." % n_epochs)
for epoch_i in range(1, n_epochs + 1):
    
    # initialize hidden state
    hidden = rnn.init_hidden(batch_size)
    
    for batch_i, (inputs, labels) in enumerate(train_loader, 1):
        
        
        # make sure you iterate over completely full batches, only
        n_batches = len(train_loader.dataset)//batch_size
        
        
        if(batch_i > n_batches):
            break
        
        # forward, back prop
        loss, hidden = forward_back_prop(rnn, optimizer, criterion, inputs, labels, hidden)
        # record loss
        batch_losses.append(loss)
        
        
        # printing loss stats
        if batch_i % show_every_n_batches == 0:
            print('Epoch: {:>4}/{:<4}  Loss: {}\n'.format(
                epoch_i, n_epochs, np.average(batch_losses)))
            batch_losses = []

# returns a trained rnn
return rnn