Pytorch resNet 在哪里增值?
Pytorch Where Does resNet add values?
我正在研究 ResNet,我发现了一个使用加号跳过连接的实现。喜欢下面
Class Net(nn.Module):
def __init__(self):
super(Net, self).__int_()
self.conv = nn.Conv2d(128,128)
def forward(self, x):
out = self.conv(x) // line 1
x = out + x // skip connection // line 2
现在我已经调试并打印了第 1 行前后的值。输出如下:
after line 1
x = [1,128,32,32]
out = [1,128,32,32]
After line 2
x = [1,128,32,32] // still
我的问题是它在哪里增加了价值??我是说
之后
x = out + x
操作,哪里加值了?
PS: Tensor格式为[batch, channel, height, width].
正如@UmangGupta 在评论中提到的,您正在打印的似乎是张量的形状(即 3x3
矩阵的 "shape" 是 [3, 3]
),而不是他们的内容。
在您的情况下,您正在处理 1x128x32x32
张量)。
希望澄清形状和内容之间差异的示例:
import torch
out = torch.ones((3, 3))
x = torch.eye(3, 3)
res = out + x
print(out.shape)
# torch.Size([3, 3])
print(out)
# tensor([[ 1., 1., 1.],
# [ 1., 1., 1.],
# [ 1., 1., 1.]])
print(x.shape)
# torch.Size([3, 3])
print(x)
# tensor([[ 1., 0., 0.],
# [ 0., 1., 0.],
# [ 0., 0., 1.]])
print(res.shape)
# torch.Size([3, 3])
print(res)
# tensor([[ 2., 1., 1.],
# [ 1., 2., 1.],
# [ 1., 1., 2.]])
我正在研究 ResNet,我发现了一个使用加号跳过连接的实现。喜欢下面
Class Net(nn.Module):
def __init__(self):
super(Net, self).__int_()
self.conv = nn.Conv2d(128,128)
def forward(self, x):
out = self.conv(x) // line 1
x = out + x // skip connection // line 2
现在我已经调试并打印了第 1 行前后的值。输出如下:
after line 1
x = [1,128,32,32]
out = [1,128,32,32]After line 2
x = [1,128,32,32] // still
我的问题是它在哪里增加了价值??我是说
之后x = out + x
操作,哪里加值了?
PS: Tensor格式为[batch, channel, height, width].
正如@UmangGupta 在评论中提到的,您正在打印的似乎是张量的形状(即 3x3
矩阵的 "shape" 是 [3, 3]
),而不是他们的内容。
在您的情况下,您正在处理 1x128x32x32
张量)。
希望澄清形状和内容之间差异的示例:
import torch
out = torch.ones((3, 3))
x = torch.eye(3, 3)
res = out + x
print(out.shape)
# torch.Size([3, 3])
print(out)
# tensor([[ 1., 1., 1.],
# [ 1., 1., 1.],
# [ 1., 1., 1.]])
print(x.shape)
# torch.Size([3, 3])
print(x)
# tensor([[ 1., 0., 0.],
# [ 0., 1., 0.],
# [ 0., 0., 1.]])
print(res.shape)
# torch.Size([3, 3])
print(res)
# tensor([[ 2., 1., 1.],
# [ 1., 2., 1.],
# [ 1., 1., 2.]])