Keras输入形状排序是(宽度,高度,ch)?

横尾修*_*尾修平 7 keras tensorflow

我使用 Keras2 和 TensorFlow 作为后端,并尝试将水平矩形图像(宽度:150 x 高度:100 x ch:3)输入网络。

我使用 cv2 来预处理图像,cv2 & TensorFlow 将图像的形状视为 [ height, width, ch ] 排序(在我的例子中,它是 [100, 150, 3]这种格式与(width:150 x height :100 x ch:3),但这不是错误。)

所以我将 Keras 模型 API 输入定义为以下代码,但出现错误。

img = cv2.imread('input/train/{}.jpg'.format(id))
img = cv2.resize(img, (100, 150))

inputs = Input(shape=(100, 150, 3))
x = Conv2D(8, (3, 3), padding='same', kernel_initializer='he_normal')(inputs)
~~~
Run Code Online (Sandbox Code Playgroud)

错误消息如下

ValueError: Error when checking input: expected input_4 to have shape
(None, 100, 150, 3) but got array with shape (4, 150, 100, 3)
Run Code Online (Sandbox Code Playgroud)

顺便input = Input((150, 100, 3))可以运行一下。

我对 Keras 和 TensorFlow 之间的差异感到很奇怪,所以我怀疑它只是没有发生错误,而是无法正常工作。

有人能解释一下吗?我无法在 Keras 文档中找到输入形状排序。

McL*_*nce 4

您可以根据需要更改尺寸顺序。您可以像这样打印和更改尺寸顺序:

from keras import backend as K
print(K.image_data_format()) # print current format
K.set_image_data_format('channels_last') # set format
Run Code Online (Sandbox Code Playgroud)

如果您想永久更改尺寸顺序,您应该在文件中编辑它keras.json,通常位于~/.keras/keras.json

"image_data_format": "channels_last"
Run Code Online (Sandbox Code Playgroud)