【发布时间】:2019-08-14 15:29:51
【问题描述】:
我正在将图像预处理为形状为 (28,28, 3) 的 Numpy 数组。当我尝试拟合我的数据时,我得到了错误。如果我传递整个准备好的数据框,我会收到错误 ValueError: Error when checks input: expected conv2d_20_input to have 4 dimension, but got array with shape (360, 1)
当我传递单个值时,我得到的错误是:检查输入时出错:预期 conv2d_16_input 有 4 个维度,但得到的数组形状为 (28、28、3
我已尝试重新处理数据。我已经尝试单独放入模型并以 1:1 进行训练,但仍然无法正常工作。
预处理代码
from tensorflow.python.keras.preprocessing.image import load_img, img_to_array
def read_and_prep_images(img_paths):
z = load_img(img_paths, target_size=(28,28))
z= img_to_array(z)
return z
df['arrays'] = df['filepath'].apply(read_and_prep_images)
模型创建
model = Sequential()
添加模型层
model.add(Conv2D(filters = 24, kernel_size = (5),padding = 'Same',
activation ='relu', input_shape = (28, 28,3)))
model.add(Conv2D(filters = 32, kernel_size = (5,5),padding = 'Same',
activation ='relu'))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same',
activation ='relu'))
model.add(Conv2D(filters = 64, kernel_size = (3,3),padding = 'Same',
activation ='relu'))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation = "relu"))
model.add(Dropout(0.5))
model.add(Dense(10, activation = "softmax"))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
仔细检查形状
np.shape(df['arrays'].iloc[0])
(28, 28, 3)
准备数据
X_train, X_test, y_train, y_test = train_test_split(df.arrays, df.label, test_size=0.4, random_state=101)
拟合模型
model.fit(X_train, y_train, batch_size=100, epochs=4, validation_split=0.2)
模型应该是合适的,我可以对模型以前没有见过的新图像使用 model.predict。
【问题讨论】:
标签: image tensorflow keras deep-learning