Fixed error when first inplace ReLU from first middle ResBlock appears on the main data propagation path #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
First, I tried to create IResNet 50, save it in ONNX and view in Netron. This is what I saw:

According to paper, ReLUs on the main information propagation path have to appear only at the end of stages. But in fact, they also appear at the first middle ResBlock.
The problem source I found is the following lines:
self.relu = nn.ReLU(inplace=True)
in__init__
of BasicBlock and Bottleneck, andout = self.relu(x)
in followingforward
method.Inplace ReLU modifies tensor in place, and after second line
out
andx
refer to the same object and both equalReLU(x)
. As the result,identity
equals toReLU(x)
instead ofx
.To fix issue, I deleted

inplace=True
in classes where lineout = self.relu(x)
appears. Now Netron diagram for ResNet50 more corresponds paper: