有没有大佬能解决这个问题,在此跪谢"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)