ValueError: Error when checking input: expected input_2 to have shape (224, 224, 3) but got array with shape (224, 224, 4)
ValueError: Error when checking input: expected input_2 to have shape (224, 224, 3) but got array with shape (224, 224, 4)
我已经从文件夹中获取输入,然后根据模型 VGG16-places365 相应地重新调整它的形状。它仍然显示相同的错误并查看了问题的 Keras 文档 (https://keras.io/applications/#vgg16),但错误仍然存在。
if __name__ == '__main__':
#from urllib.request import urlopen
import numpy as np
from PIL import Image
from cv2 import resize
pred_array = np.empty((0,6),dtype=float)
TEST_PATH = '/home/guest/Downloads/content/image/thumb'
for img in os.listdir(TEST_PATH):
image = Image.open(os.path.join(TEST_PATH, img))
image = np.array(image, dtype=np.uint8)
image = resize(image, (224, 224))
image = np.expand_dims(image, 0)
model = VGG16_Places365(weights='places')
predictions_to_return = 5
preds = model.predict(image)[0]
top_preds = np.argsort(preds)[::-1][0:predictions_to_return]
# load the class label
file_name = 'categories_places365.txt'
if not os.access(file_name, os.W_OK):
synset_url = 'https://raw.githubusercontent.com/csailvision/places365/master/categories_places365.txt'
os.system('wget ' + synset_url)
classes = list()
with open(file_name) as class_file:
for line in class_file:
classes.append(line.strip().split(' ')[0][3:])
classes = tuple(classes)
temprow = np.hstack((np.array([img]),top_preds))
np.append(pred_array,temprow.reshape(-1,pred_array.shape[1]),axis=0)
df = pd.DataFrame(data=pred_array,columns=['File_name','Tag_1','Tag_2','Tag_3','Tag_4','Tag_5'])
print(df)
您可能正在加载带有 alpha 通道 (RGBA) 的图像,但 VGG16 神经网络需要没有 alpha 通道 (RGB) 的图像。
要将图像从 RGBA 转换为 RGB,您可以使用
image = image.convert("RGB")
在 PIL Image 对象上,即直接在 Image.open
之后,或者在调用 np.array
之后在 numpy 数组对象上使用 numpy 数组切片来切断前三个颜色通道:
image = image[:, :, :3]
我已经从文件夹中获取输入,然后根据模型 VGG16-places365 相应地重新调整它的形状。它仍然显示相同的错误并查看了问题的 Keras 文档 (https://keras.io/applications/#vgg16),但错误仍然存在。
if __name__ == '__main__':
#from urllib.request import urlopen
import numpy as np
from PIL import Image
from cv2 import resize
pred_array = np.empty((0,6),dtype=float)
TEST_PATH = '/home/guest/Downloads/content/image/thumb'
for img in os.listdir(TEST_PATH):
image = Image.open(os.path.join(TEST_PATH, img))
image = np.array(image, dtype=np.uint8)
image = resize(image, (224, 224))
image = np.expand_dims(image, 0)
model = VGG16_Places365(weights='places')
predictions_to_return = 5
preds = model.predict(image)[0]
top_preds = np.argsort(preds)[::-1][0:predictions_to_return]
# load the class label
file_name = 'categories_places365.txt'
if not os.access(file_name, os.W_OK):
synset_url = 'https://raw.githubusercontent.com/csailvision/places365/master/categories_places365.txt'
os.system('wget ' + synset_url)
classes = list()
with open(file_name) as class_file:
for line in class_file:
classes.append(line.strip().split(' ')[0][3:])
classes = tuple(classes)
temprow = np.hstack((np.array([img]),top_preds))
np.append(pred_array,temprow.reshape(-1,pred_array.shape[1]),axis=0)
df = pd.DataFrame(data=pred_array,columns=['File_name','Tag_1','Tag_2','Tag_3','Tag_4','Tag_5'])
print(df)
您可能正在加载带有 alpha 通道 (RGBA) 的图像,但 VGG16 神经网络需要没有 alpha 通道 (RGB) 的图像。
要将图像从 RGBA 转换为 RGB,您可以使用
image = image.convert("RGB")
在 PIL Image 对象上,即直接在 Image.open
之后,或者在调用 np.array
之后在 numpy 数组对象上使用 numpy 数组切片来切断前三个颜色通道:
image = image[:, :, :3]