比较与torch.nn.Unfold的功能差异
torch.nn.Unfold
class torch.nn.Unfold(
kernel_size,
dilation=1,
padding=0,
stride=1
)
更多内容详见torch.nn.Unfold。
mindspore.nn.Unfold
class mindspore.nn.Unfold(
ksizes,
strides,
rates,
padding="valid"
)(x)
更多内容详见mindspore.nn.Unfold。
使用方式
PyTorch:输出的形状,(N,C×∏(kernel_size),L) -> 输出的张量是形状为(N,C×∏(kernel_size),L)的3维张量。
MindSpore:输出张量,数据类型与x相同的4维张量,形状为[out_batch, out_depth, out_row, out_col] 其中 out_batch 与 in_batch 相同。
代码示例
import mindspore as ms
import mindspore.nn as nn
import torch
import numpy as np
unfold = torch.nn.Unfold(kernel_size=(2, 3))
input = torch.ones(2, 5, 3, 4)
output = unfold(input)
print(output.size())
# Out:
# torch.Size([2, 30, 4])
net = nn.Unfold(ksizes=[1, 2, 2, 1], strides=[1, 2, 2, 1], rates=[1, 2, 2, 1])
image = ms.Tensor(np.ones([2, 5, 3, 4]), dtype=ms.float16)
output = net(image)
print(output.shape)
# Out:
# (2, 20, 1, 1)