簡體   English   中英

torch.nn.conv2d 給出的結果與 torch.nn.functional.conv2d 不同

[英]torch.nn.conv2d does not give the same result as torch.nn.functional.conv2d

這是我的代碼:

l1 = nn.Conv2d(3, 2, kernel_size=3, stride=2).double() #Layer
l1wt = l1.weight.data #filter
inputs = np.random.rand(3, 3, 5, 5) #input
it = torch.from_numpy(inputs) #input tensor
output1 = l1(it) #output
output2 = torch.nn.functional.conv2d(it, l1wt, stride=2) #output
print(output1)
print(output2)

我希望 output1 和 output2 得到相同的結果,但事實並非如此。 我做錯了什么嗎 nn 和 nn.functional 工作不同嗎?

我想你忘記了偏見。

inp = torch.rand(3,3,5,5)
a = nn.Conv2d(3,2,3,stride=2)
a(inp)
nn.functional.conv2d(inp, a.weight.data, bias=a.bias.data)

在我看來一樣

正如@Coolness 所提到的,偏置在功能版本中默認是關閉的。

文檔參考: https://pytorch.org/docs/stable/nn.html#conv2d https://pytorch.org/docs/stable/nn.functional.html#conv2d

import torch
from torch import nn
import numpy as np
# Bias Off
l1 = nn.Conv2d(3, 2, kernel_size=3, stride=1, bias=False).double() #Layer
l1wt = l1.weight.data #filter
inputs = np.random.rand(3, 3, 5, 5) #input
it = torch.from_numpy(inputs) #input tensor
it1 = it.clone()
output1 = l1(it) #output
output2 = torch.nn.functional.conv2d(it, l1wt, stride=1) #output
print(torch.equal(it, it1))
print(output1)
print(output2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM