python - 用于 conv2d 和手动加载图像的 Keras input_shape

标签 python tensorflow neural-network keras convolution

我正在从大量 384x286 黑白图像手动创建我的数据集。

我加载这样的图像:

x = []
for f in files:
        img = Image.open(f)
        img.load()
        data = np.asarray(img, dtype="int32")
        x.append(data)
x = np.array(x)

这导致 x 成为一个数组 (num_samples, 286, 384)

print(x.shape) => (100, 286, 384)

阅读 keras 文档并检查我的后端,我应该向卷积步骤提供一个由(行、列、 channel )组成的 input_shape

因为我不知道样本大小,所以我希望作为输入大小传递,类似于

( None, 286, 384, 1 )

模型构建如下:

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
# other steps...

作为 input_shape (286, 384, 1) 传递导致:

Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (85, 286, 384)

传递 as_input_shape (None, 286, 384, 1 ) 导致:

Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=5

我做错了什么?我该如何 reshape 输入数组?

最佳答案

input_shape 设置为 (286,384,1)。现在该模型需要 4 个维度的输入。这意味着您必须使用 .reshape(n_images, 286, 384, 1) reshape 图像。现在您已经在不更改数据的情况下添加了一个额外的维度,并且您的模型已准备好运行。基本上,您需要将数据 reshape 为(n_imagesx_shapey_shapechannels)。

很酷的是,您还可以使用 RGB 图像作为输入。只需将 channels 更改为 3。

同时检查这个答案: Keras input explanation: input_shape, units, batch_size, dim, etc

示例

import numpy as np
from keras.models import Sequential
from keras.layers.convolutional import Convolution2D
from keras.layers.core import Flatten, Dense, Activation
from keras.utils import np_utils

#Create model
model = Sequential()
model.add(Convolution2D(32, kernel_size=(3, 3), activation='relu', input_shape=(286,384,1)))
model.add(Flatten())
model.add(Dense(2))
model.add(Activation('softmax'))

model.compile(loss='binary_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])

#Create random data
n_images=100
data = np.random.randint(0,2,n_images*286*384)
labels = np.random.randint(0,2,n_images)
labels = np_utils.to_categorical(list(labels))

#add dimension to images
data = data.reshape(n_images,286,384,1)

#Fit model
model.fit(data, labels, verbose=1)

关于python - 用于 conv2d 和手动加载图像的 Keras input_shape,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43895750/

相关文章:

python - 编译自动编码器时keras出错?

python - Pybrain 神经网络无法正确训练

python-2.7 - ValueError : Tensor:(. ..) 不是该图的元素

python - 在 Python 中使用 csv 文件使用字典计算字符串中的单词数

python - 使用 Enterprise Architect Python API 旋转标签

python - 我可以访问函数 B 中的变量 X,如果它位于调用函数 B 的函数 A 中吗?

python - tensorflow 中的数据标准化

python - Eager Execution 与 tf.function 的关系

python - 当我使用 tflearn 预测测试用例时,它显示 "Cannot feed value of shape (32, 32, 3) for Tensor u' input/X : 0', which has shape ' (? , 32, 32, 3)"

python - 为 Pandas 数据框中B列中的绝对数字分配A列中的相同值