#python #tensorflow #keras
#python #тензорный поток #keras
Вопрос:
У меня есть следующий код, который должен обучить модель keras с помощью набора изображений, которые являются либо dummy_images, либо product_images, которые выдают ошибку ValueError: could not broadcast input array from shape (300,300,3) into shape (300,300)
:
# 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))"
, но выдает ошибку, что этот параметр будет принимать только два аргумента, а не три.
Что я здесь делаю не так?
Ответ №1:
Вы можете изменять размер своих изображений с помощью numpy:
for i in range(len(images)):
images[i] = np.resize(images[i], (300, 300, 3))