我有以下代码,这些代码应该训练一个包含大量图片的keras模型,这些图片要么是dummy_images,要么是产生错误ValueError: could not broadcast input array from shape (300,300,3) into shape (300,300)的product_images
# 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))",但它抛出了这个参数只接受两个参数而不是三个参数的错误。
我在这里做错了什么?
发布于 2021-03-30 21:50:17
您可以使用numpy调整图像的大小:
for i in range(len(images)):
images[i] = np.resize(images[i], (300, 300, 3))https://stackoverflow.com/questions/66871945
复制相似问题