首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras错误:无法将输入数组从形状(300,300,3)广播到形状(300,300)

Keras错误:无法将输入数组从形状(300,300,3)广播到形状(300,300)
EN

Stack Overflow用户
提问于 2021-03-30 21:32:31
回答 1查看 43关注 0票数 0

我有以下代码,这些代码应该训练一个包含大量图片的keras模型,这些图片要么是dummy_images,要么是产生错误ValueError: could not broadcast input array from shape (300,300,3) into shape (300,300)的product_images

代码语言:javascript
复制
# import packages
import os
import numpy as np
import pandas as pd
import scipy
import sklearn
import keras
from keras.models import Sequential
import cv2
import imageio
from skimage import io

# Defining Filepath
dummyPath = os.path.join('data', 'train', 'dummy')
productPath = os.path.join('data', 'train', 'product')
dummy, product = os.listdir(dummyPath), os.listdir(productPath)

# Loading the images
print("loading images")
images = []
label = []
for i in dummy:
    image = imageio.imread(os.path.join(dummyPath, i))
    images.append(image)
    label.append(0)  # for dummy images

for i in product:
    image = imageio.imread(os.path.join(productPath, i))
    images.append(image)
    label.append(1)  # for product images

# resizing all images
print("resizing images")
for i in range(len(images)):
    images[i] = cv2.resize(images[i], (300, 300))

# converting images to arrays
print("converting images to np-arrays")
images = np.array(images, dtype='object')
label = np.array(label)

# Defining the hyperparameters
print("Defining Parameters")
filters = 10
filtersize = (5, 5)
epochs = 5
batchsize = 128
input_shape = (300, 300, 3)

# Converting the target variable to the required size
from keras.utils.np_utils import to_categorical
label = to_categorical(label)

# Defining the model
print("Defining the model")
model = Sequential()

model.add(keras.layers.InputLayer(input_shape=input_shape))
model.add(keras.layers.convolutional.Conv2D(filters, filtersize, strides=(1, 1), padding='valid',
                                            data_format='channels_last', activation='relu'))
model.add(keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(units=2, input_dim=50, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(images, label, epochs=epochs, batch_size=batchsize, validation_split=0.3)

model.summary()

错误在行(或其参数)中:

images = np.array(images, dtype='object')

我试图将"images[i] = cv2.resize(images[i], (300, 300))"更改为"images[i] = cv2.resize(images[i], (300, 300, 3))",但它抛出了这个参数只接受两个参数而不是三个参数的错误。

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-03-30 21:50:17

您可以使用numpy调整图像的大小:

代码语言:javascript
复制
for i in range(len(images)):
    images[i] = np.resize(images[i], (300, 300, 3))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66871945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档