-
Notifications
You must be signed in to change notification settings - Fork 239
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
strange view() operation in ReduceState module #11
Comments
Thanks for reviewing the code. You are correct I fixed the code. Would update the result after the re run. |
@atulkum
And coverage is coverage + attn_dist. pointer_summarizer/training_ptr_gen/model.py Line 124 in 5e51169
So, the step_converage_loss should always be the sum of attn_dist(1.0)? |
I think you are right. The order of updating the coverage is not correct. The coverage should be updated after coverage loss has been calculated. I think I might have made a mistake here while code refactoring. I will fix it.
|
Thanks for reviewing the code. I have fixed the bug. |
@atulkum have you ever try to set is_coverage as True, it's extremely easy to cause loss became NaN, less learning rate is useless for this issue. |
I have turned on is_coverage=True after training for 500k iteration. Making is_coverage=True from the beginning makes the training unstable. |
@atulkum I think this operation may cause NaN
calculating the memory of attention in each decoder step may create many computation graph branch in torch backend, but in fact , we only need to calculate it once after get encoder_outputs. |
You are right about increasing branches computation graph but it won't cause NaN. If you are getting NaN then it might be somewhere else. I tested it on pytorch 0.4 and it does not give NaN. I am changing this to be called only once (thanks for catching this) and test it again. |
@atulkum I set is_coverage as True after 500k step, but at the beginning of retraining, it always gives NaN. I'll continue to test, thank you again. |
After how many iteration (with is_coverage = True) you are getting NaN? You can try to debug it on CPU. My GPU is busy right now, but I just tested it on CPU for around 20 epoch I did not get NaN or any exploding gradient etc. |
Thanks for suggestion. I initialized the model_file_path, but after no more than 100 iter, it get NaN:( |
I have uploaded a model here. I retrain it with with is_coverage = True for 200k iteration but did not get NaN For retraining you should do 3 things:
I am also curious why you get NaN, can you debug it and pinpoint the code which is causing NaN? |
Thanks for your code, but I have a question: when I run the train.py , one error : AttributeError: 'generator' object has no attribute 'next', i dont understand it , the system show it at the batcher.py 209. |
@jamestang0219 were you able to point out the nan problem? |
We wanna reduce the forward and backward state, so we need to concatenate the forward state and backward state, then go through a nn.Linear module to let 2 * hidden_dim become hidden_dim.
In your code, h is 2 x B x hidden_dim, and you use view() operation directly on h and c. The results should be concatenating first example forward state and second example forward state, not concatenating first example forward state and first example backward state.
In my opinion, we should use h.transpose(0, 1).contiguous().view(-1, config.hidden_dim*2).
pointer_summarizer/training_ptr_gen/model.py
Line 75 in 454a2f6
The text was updated successfully, but these errors were encountered: