qq_38402311 2021-05-08 15:16 采纳率: 0%
浏览 29

预期具有形状(120、120、3),但获得了具有形状(60、60、4)的数组

有没有大佬能解决这个问题,在此跪谢"Traceback (most recent call last):
  File "E:/work/Remote-sensing-master/Remote-sensing-master/Remote-sensing-master/model.py", line 168, in <module>
    k = model.predict(img_tensor,)
  File "E:\Anaconda\lib\site-packages\keras\engine\training.py", line 1149, in predict
    x, _, _ = self._standardize_user_data(x)
  File "E:\Anaconda\lib\site-packages\keras\engine\training.py", line 751, in _standardize_user_data
    exception_prefix='input')
  File "E:\Anaconda\lib\site-packages\keras\engine\training_utils.py", line 138, in standardize_input_data
    str(data_shape))
ValueError: Error when checking input: expected conv2d_1_input to have shape (120, 120, 3) but got array with shape (60, 60, 4)"

以下是代码:
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, ZeroPadding2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import rmsprop

from PIL import Image
import numpy as np
from keras.preprocessing import image
n_classes = 3
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=(120, 120, 3)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))


model.compile(optimizer = rmsprop(lr=0.0001, decay=1e-6),
                   loss = 'categorical_crossentropy', 
                   metrics = ['accuracy'])

batch_size = 16
#batch_size = 128

train_datagen = ImageDataGenerator(
        rescale = 1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        'dataset/train',
        target_size=(120, 120),
        batch_size = 16,
        class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
        'dataset/validation',
        target_size=(120, 120),
        batch_size=16,
        class_mode = 'categorical')
#
model.fit_generator(
        train_generator,
        steps_per_epoch=701 // 16,
        epochs = 8,
        validation_data=validation_generator,
        validation_steps= 79 // 16
        )
#validation_steps= 800 // 128
sample_shape = 60
test_image = Image.open('dataset/530m_2_copy.png')
#width, height = test_image.size
box = (0, 0, sample_shape, sample_shape)
width = test_image.size[0]
height = test_image.size[1]
print(width,height)
for x in range(0, width, 3):
    for y in range(0, height, 3):
        if x + sample_shape < width:
            x2 = x + sample_shape
        else:
            break
        if y + sample_shape < height:
            y2 = y + sample_shape
        else:
            break

        box = (x, y, x2, y2)
        sample = test_image.crop(box)
        img = sample
        img_tensor = image.img_to_array(img)
        img_tensor = np.expand_dims(img_tensor, axis=0)
        img_tensor /= 255.
k = model.predict(img_tensor,)
print(k)

  • 写回答

3条回答 默认 最新

  • kaili_ya 2021-05-08 16:08
    关注

    这是你输入数据的问题,人家要的是120, 120, 3的输入,你的输入是60, 60, 4,要不是你预处理有问题,要不是你数据读取就出错了

     

    评论

报告相同问题?