【问题标题】:Tensorflow vs PyTorch: convolution doesn't workTensorflow vs PyTorch:卷积不起作用
【发布时间】:2019-02-15 03:09:04
【问题描述】:

我正在尝试测试 Tensorflow 卷积输出是否与具有相同权重的 PyTorch 卷积输出匹配。

这是我将权重从 Tensorflow 复制到 Torch、卷积和比较输出的代码:

import tensorflow as tf
import numpy as np
import math
from math import floor, ceil
import os
import math
import datetime
from scipy import misc
from PIL import Image
import model
import torch
from torch import nn
import common
import torch.nn.functional as F


sess = tf.Session()
np.random.seed(1)
tf.set_random_seed(1)

#parameters
kernel_size = 3
input_feat = 4
output_feat = 4

#inputs
npo = np.random.random((1,5,5, input_feat))
x = tf.convert_to_tensor(npo, tf.float32)
x2 = torch.tensor(np.transpose(npo, [0, 3, 1, 2])).double()

#the same weights
weights = np.random.random((kernel_size,kernel_size,input_feat,output_feat))
weights_torch = np.transpose(weights, [3, 2, 1, 0])

#convolving with tensorflow
w = tf.Variable(weights, name="testconv_W", dtype=tf.float32)
res = tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding="VALID")

sess.run(tf.global_variables_initializer())


#convolving with torch
torchres = F.conv2d(x2, torch.tensor(weights_torch), padding=0, bias=torch.zeros((output_feat)).double())

#comparing the results
print(np.mean(np.transpose(sess.run(res), [0, 3, 1, 2])) - torch.mean(torchres).detach().numpy())

输出

0.15440369065716908

为什么?为什么会有这么大的差异? Tensorflow conv2d 实现不正确吗?为什么它不匹配 PyTorch?难道我做错了什么?在内核大小 1 上一切正常。 请帮忙。

【问题讨论】:

    标签: python tensorflow deep-learning pytorch


    【解决方案1】:

    你可以试试x2 = torch.tensor(np.transpose(npo, [0, 3, 2, 1])).double() 而不是x2 = torch.tensor(np.transpose(npo, [0, 3, 1, 2])).double()

    【讨论】:

    • 我更改了这一行。现在它输出 1.109498759532812e-06。但不是零。
    • 大部分输出都一样吗?我想元素差异的平均值/中位数将非常低且可以忽略不计。
    • 是的,可以忽略不计。
    猜你喜欢
    • 1970-01-01
    • 2019-08-18
    • 2020-09-19
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2021-04-13
    相关资源
    最近更新 更多