有没有大佬能解决这个问题,在此跪谢"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)
这是你输入数据的问题,人家要的是120, 120, 3的输入,你的输入是60, 60, 4,要不是你预处理有问题,要不是你数据读取就出错了
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y