我正在尝试将带有Keras的Python项目翻译为r。然而,我偶然发现了一个奇怪的形状问题。下面你可以看到VGG16模型,R为(None,3,224,224), Python为(None, 224,224,3)。我能做些什么呢?
我试图简单地将尺寸切换到R形状,但这给出了MaxPooling
的错误ShapeError
ValueError: Input 0 of layer "vgg16" is incompatible with the layer: expected shape=(None, 3, 224, 224), found shape=(None, 224, 224, 3)
尝试(不工作,因为MaxPoolingShape NHWC)
test = aperm(reshaped_img, c(1,4,2,3))
--> "Error: Default MaxPoolingOp only supports NHWC on device type CPU"
Input_shape (not worked)
在加载模型时使用input_shape参数会阻止模型加载,因为形状不匹配。文档
<<p>R代码/strong>model <- application_vgg16(weights="imagenet", include_top=TRUE)
summary(model)
给我:
Model: "vgg16"
________________________________________________________________________________
Layer (type) Output Shape Param #
================================================================================
input_3 (InputLayer) [(None, 3, 224, 224)] 0
block1_conv1 (Conv2D) (None, 64, 224, 224) 1792
block1_conv2 (Conv2D) (None, 64, 224, 224) 36928
block1_pool (MaxPooling2D) (None, 64, 112, 112) 0
block2_conv1 (Conv2D) (None, 128, 112, 112) 73856
block2_conv2 (Conv2D) (None, 128, 112, 112) 147584
block2_pool (MaxPooling2D) (None, 128, 56, 56) 0
block3_conv1 (Conv2D) (None, 256, 56, 56) 295168
block3_conv2 (Conv2D) (None, 256, 56, 56) 590080
block3_conv3 (Conv2D) (None, 256, 56, 56) 590080
block3_pool (MaxPooling2D) (None, 256, 28, 28) 0
block4_conv1 (Conv2D) (None, 512, 28, 28) 1180160
block4_conv2 (Conv2D) (None, 512, 28, 28) 2359808
block4_conv3 (Conv2D) (None, 512, 28, 28) 2359808
block4_pool (MaxPooling2D) (None, 512, 14, 14) 0
block5_conv1 (Conv2D) (None, 512, 14, 14) 2359808
block5_conv2 (Conv2D) (None, 512, 14, 14) 2359808
block5_conv3 (Conv2D) (None, 512, 14, 14) 2359808
block5_pool (MaxPooling2D) (None, 512, 7, 7) 0
flatten (Flatten) (None, 25088) 0
fc1 (Dense) (None, 4096) 102764544
fc2 (Dense) (None, 4096) 16781312
predictions (Dense) (None, 1000) 4097000
================================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
________________________________________________________________________________
Python
model = VGG16()
model = Model(inputs=model.inputs, outputs=model.output)
给我:
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_3 (InputLayer) [(None, 224, 224, 3)] 0
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792
block1_conv2 (Conv2D) (None, 224, 224, 64) 36928
block1_pool (MaxPooling2D) (None, 112, 112, 64) 0
block2_conv1 (Conv2D) (None, 112, 112, 128) 73856
block2_conv2 (Conv2D) (None, 112, 112, 128) 147584
block2_pool (MaxPooling2D) (None, 56, 56, 128) 0
block3_conv1 (Conv2D) (None, 56, 56, 256) 295168
block3_conv2 (Conv2D) (None, 56, 56, 256) 590080
block3_conv3 (Conv2D) (None, 56, 56, 256) 590080
block3_pool (MaxPooling2D) (None, 28, 28, 256) 0
block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160
block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808
block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808
block4_pool (MaxPooling2D) (None, 14, 14, 512) 0
block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808
block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808
block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808
block5_pool (MaxPooling2D) (None, 7, 7, 512) 0
flatten (Flatten) (None, 25088) 0
fc1 (Dense) (None, 4096) 102764544
fc2 (Dense) (None, 4096) 16781312
predictions (Dense) (None, 1000) 4097000
=================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
_________________________________________________________________
我仍然不知道这些洗牌的输入层是如何存在的。然而,我发现在我的本地机器上没有发生这种情况。打乱层发生在Amazon SageMaker Notebook实例上。
我在这里张贴了截图:
Stackoverflow在Imagenet Layer上的例子