У меня проблемы с попыткой выяснить, как отправить данные из cv.imread () в мою модель машинного обучения.
Из моей функции чтения изображений я получаю список numpy массивов, которые содержат изображения с размером (256, 256, 3).
# image reading
res_img = []
for i in files:
img = cv2.imread(os.path.join("temp", i))
res = cv2.resize(img, (256, 256))
res_img.append(res)
return res_img
Затем он сохраняется в кадре данных и отправляется в модель. Тем не менее, определяется, что датафрейм имеет размерность (56, 1), где 56 - длина моих данных, а 1 - потому что каждый массив numpy определяется как 1 объект.
# train model
model = create_model(trainX)
model_history = model.fit(trainX, trainY, validation_data=(testX, testY), epochs=..., batch_size=...)
# create model
def create_model(data):
model = Sequential()
model.add(Conv2D(32, kernel_size=4, activation='relu', input_shape=(256, 256, 3)))
...
return model
Однако это возвращает
ValueError: Error when checking input: expected conv2d_input to have 4 dimensions, but got array with shape (56, 1)
Другая вещь, которую я пытался, состояла в том, чтобы объединить все массивы numpy в данных в большой массив numpy, который имел правильные размеры
trainX_arr = []
trainX = trainX.to_numpy()
for i in trainX:
trainX_arr.append(i)
trainX_arr = np.asarray(trainX_arr)
Это дает правильную форму:
print(trainX_arr.shape)
# (56, 256, 256, 3)
Однако при отправке в модель возвращается
ValueError: No data provided for "conv2d_input". Need data for each key in: ['conv2d_input']
Я предполагаю, что входные данные не являются фреймом данных. Наконец, я попытался на первом шаге объединить массивы numpy, а затем сохранить их в кадре данных, например,
res_img = []
for i in files:
img = cv2.imread(os.path.join("temp", i))
res = cv2.resize(img, (256, 256))
res_img.append(res)
img_arr = []
for i in res_img:
img_arr.append(i)
img_arr = np.asarray(img_arr)
return img_arr
Однако при попытке вставить его в кадр данных:
df.insert(0, "x", img_arr)
Возвращает
ValueError: Wrong number of dimensions. values.ndim != ndim [4 != 2]
Я полагаю, это потому, что кадр данных не может содержать многомерный массив, но это возвращает меня к тому, с чего я начал. Я действительно смущен тем, что я должен делать, чтобы заставить это работать, и любая помощь будет принята с благодарностью.