【问题标题】:ValueError: Input 0 of layer sequential_1 is incompatible with the layerValueError: 层序贯_1 的输入 0 与层不兼容
【发布时间】:2020-11-07 16:07:19
【问题描述】:

我在 Keras 中编写了以下模型,但是在进行预测时,我遇到了 ValueError 。我查看了 StackOverflow 上的其他问题,但无法与我的代码完全相关。

我的训练模型如下:

#building the CNN model
    cnn = Sequential()

kernelSize = (3, 3)
ip_activation = 'relu'
ip_conv_0 = Conv2D(filters=32, kernel_size=kernelSize, input_shape=im_shape, activation=ip_activation)
cnn.add(ip_conv_0)

# Add the next Convolutional+Activation layer
ip_conv_0_1 = Conv2D(filters=64, kernel_size=kernelSize, activation='relu')
cnn.add(ip_conv_0_1)
# Add the Pooling layer
pool_0 = MaxPool2D(pool_size=(2, 2), strides=(2, 2), padding="same")
cnn.add(pool_0)

ip_conv_1 = Conv2D(filters=64, kernel_size=kernelSize, activation='relu')
cnn.add(ip_conv_1)
ip_conv_1_1 = Conv2D(filters=64, kernel_size=kernelSize, activation='relu')
cnn.add(ip_conv_1_1)
pool_1 = MaxPool2D(pool_size=(2, 2), strides=(2, 2), padding="same")
cnn.add(pool_1)

# Let's deactivate around 20% of neurons randomly for training
drop_layer_0 = Dropout(0.2)
cnn.add(drop_layer_0)


flat_layer_0 = Flatten()
cnn.add(Flatten())

# Now add the Dense layers
h_dense_0 = Dense(units=128, activation='relu', kernel_initializer='uniform')
cnn.add(h_dense_0)
# Let's add one more before proceeding to the output layer
h_dense_1 = Dense(units=64, activation='relu', kernel_initializer='uniform')
cnn.add(h_dense_1)

op_activation = 'softmax'
output_layer = Dense(units=n_classes, activation='softmax', kernel_initializer='uniform')
cnn.add(output_layer)

opt = 'adam'
loss = 'categorical_crossentropy'
metrics = ['accuracy']
# Compile the classifier using the configuration we want
cnn.compile(optimizer=opt, loss=loss, metrics=metrics)

cnn_summary = cnn.summary()

history = cnn.fit(x_train, y_train,
                  batch_size=40, epochs=20,
                  validation_data=(x_test, y_test)
                  )

我尝试在另一个 .py 文件中使用以下代码进行预测:

import numpy as np
from keras.preprocessing import image 

from keras.models import load_model
model=load_model('trained_model.h5')

test_image = image.load_img('131.png', target_size=(32,32))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0)
pre = model.predict(test_image)

但问题是我得到的值错误为:

ValueError: Input 0 of layer sequential_1 is incompatible with the layer: expected axis -1 of input shape to have value 1 but received input with shape [None, 32, 32, 3]

那么任何人都可以帮助我解决这个错误吗?

【问题讨论】:

    标签: python validation machine-learning keras prediction


    【解决方案1】:

    它基本上说你的第一层期望(32, 32, 1)的形状

    ip_conv_0 = Conv2D(filters=32, kernel_size=kernelSize, input_shape=im_shape, activation=ip_activation)
    

    ,这里是im_shape=(32,32,1),但是在预测时,它会收到一个形状为(32,32,3)的3通道图像。

    我认为您使用灰度图像训练了您的网络,并尝试使用彩色图像 (RGB) 进行推断,这不适合您构建的网络模型。您可以做的是,您可以使用形状为(32,32,3) 的图像训练您的模型,我相信这不是一个选项,或者您可以使您的 RGB(彩色)图像灰度化,使您的图像具有形状(32,32,1),然后您可以根据您的模型进行推断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2021-07-04
      • 2021-05-31
      • 1970-01-01
      • 2020-11-28
      • 2021-09-13
      相关资源
      最近更新 更多