我尝试使用FER2013数据集向PyTorch模型进行情感识别convert CNN Keras model,我遇到以下错误:
Traceback (most recent call last):
File "VGG.py", line 112, in <module>
transfer.keras_to_pytorch(keras_network, pytorch_network)
File "/home/eorg/NeuralNetworks/user/Project/model/nntransfer.py", line 121, in keras_to_pytorch
pytorch_model.load_state_dict(state_dict)
File "/home/eorg/.local/lib/python2.7/site-packages/torch/nn/modules/module.py", line 334, in load_state_dict
own_state[name].copy_(param)
RuntimeError: inconsistent tensor size at /b/wheel/pytorch-src/torch/lib/TH/generic/THTensorCopy.c:51
我明白错误与图像的形状有关。在Keras中,输入大小定义为48乘48。
我的问题是如何在PyTorch模型中定义我的图片的形状是48x48?我在文档和示例中找不到这样的功能。
任何帮助都会有用!
答案 0 :(得分:4)
为了自动调整输入图像的大小,您需要定义所有图像都经过的预处理管道。这可以使用torchvision.transforms.Compose()
(Compose docs)来完成。要调整图像大小,您可以使用torchvision软件包中的torchvision.transforms.Scale()
(Scale docs)。
参见文档:
注意,在文档中,它表示不推荐.Scale()
,而应使用.Resize()
。 Resize docs
这将是一个最小的工作示例:
import torch
from torchvision import transforms
p = transforms.Compose([transforms.Scale((48,48))])
from PIL import Image
img = Image.open('img.jpg')
img.size
# (224, 224) <-- This will be the original dimensions of your image
p(img).size
# (48, 48) <-- This will be the rescaled/resized dimensions of your image
答案 1 :(得分:0)
如果您尝试过的代码也并排给出,将会有所帮助。 @blckbird 给出的答案似乎是正确的(即,在某些时候您需要转换数据)。
现在需要使用 Resize 而不是 Scale。
所以假设数据的批量大小为 64,有 3 个通道,大小为 128x128,您需要将其转换为 64x3x48x48,那么下面的代码应该可以做到
trans = transforms.Compose([transforms.Resize(48)])
tData = trans(data)
此外,如果通道和批次需要改组而不是使用置换。例如将频道带到最后做:
pData = tData.permute([0, 2, 3, 1])