![](/img/trans.png)
[英]How to specify input_shape in Conv2D layer in Tensor Flow 2.0, keras
[英]Keras input_shape for conv2d and manually loaded images
我正在从多个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文档并检查我的后端,我应该向卷积步骤提供一个由(rows,cols,channels)组成的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)传递会导致:
检查输入时出错:预期conv2d_1_input具有4个维,但数组的形状为(85,286,384)
传递as_input_shape(None,286,384,1)会导致:
输入0与层conv2d_1不兼容:预期ndim = 4,找到的ndim = 5
我究竟做错了什么 ? 我该如何重塑输入数组?
将input_shape
设置为(286,384,1)。 现在,模型需要一个4维的输入。 这意味着您必须使用.reshape(n_images, 286, 384, 1)
重塑图像。 现在,您添加了一个额外的维度,而无需更改数据,并且模型可以运行了。 基本上,您需要将数据调整为( n_images
, x_shape
, y_shape
, channels
)。
很棒的事情是您还可以使用RGB图像作为输入。 只需将channels
更改为3。
还要检查以下答案: Keras输入说明:input_shape,units,batch_size,dim等
例
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)
您的input_shape尺寸是正确的,即input_shape(286,384,1)
将输入图像重塑为4D [batch_size,img_height,img_width,number_of_channels]
input_image=input_image.reshape(85,286, 384,1)
中
model.fit(input_image,label)
我认为以下方法可以解决您的错误。
我们提供给第一个conv2d(顺序模型的第一层)的input_shape应该类似于(286,384,1)或(宽度,高度,通道)。 其中batch_size不需要“无”维度。
您输入的形状可以是(batch_size,286,384,1)
这对您有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.