我一直在尝试 pytorch( ipex ) 的英特尔扩展来优化我的推理。我正在使用来自 torchvision 的预训练模型。我想比较使用和不使用 ipex 的改进,所以我创建了一个模型副本,将其转换为 ipex。
现在我尝试对我的原始模型和转换为 ipex 的模型进行推理。
对于转换为 ipex 的模型,我没有问题,但对于我的原始模型,我收到以下错误。
RuntimeError: Input type (torch.FloatTensor) and weight type (XPUFloatType) should be the same
这个错误看起来是由于我的实际模型也转换为 ipex 我如何防止实际模型即 model_original 不转换为 ipex
下面是一个最小的复制器。
import intel_pytorch_extension as ipex
import torchvision
import torch
import torch.utils.data as Data
model = torchvision.models.resnet50(pretrained=True)
model.eval()
model_original=model #original pytorch model which does not use ipex
model_ipex=model
model_ipex.to(ipex.DEVICE) # a copy of a model converted to use IPEX
transform = torchvision.transforms.Compose([
torchvision.transforms.Resize((500, 400)),
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
dataset = torchvision.datasets.ImageFolder(
root='dataset',
transform=transform,
)
loader = Data.DataLoader(
dataset=dataset,
batch_size=1
)
for data, target in loader: #inference with ipex this works fine
print(target)
output=model_ipex(data)
for data, target in loader: #inference with original model this fails
print(target)
output=model_original(data)