【发布时间】:2021-02-05 12:59:12
【问题描述】:
我正在尝试构建一个图像分类模型,该模型可以识别您是否戴着口罩,但在训练模型时遇到了问题。
return ops.EagerTensor(value, ctx.device_name, dtype)
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list).
这是我的代码
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.optimizers import SGD
import os
import cv2
import random
def getData():
training = []
for image in os.listdir("src/data/with_mask"):
img = cv2.imread(f"src/data/with_mask/{image}",0)
training.append([img.tolist(),1])
for image in os.listdir("src/data/without_mask"):
img = cv2.imread(f"src/data/without_mask/{image}",0)
training.append([img.tolist(),0])
random.shuffle(training)
train_x = np.array([x[0] for x in training])
train_y = np.array([x[1] for x in training])
return (train_x ,train_y)
train_x , train_y = getData()
model = Sequential()
model.add(Dense(128,input_shape=(len(train_x[0]),),activation="relu"))
model.add(Flatten())
model.add(Dense(64,activation="relu"))
model.add(Dense(64,activation="relu"))
model.add(Dense(1,activation="softmax"))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss="categorical_crossentropy",
optimizer=sgd, metrics=["accuracy"])
hist = model.fit(
train_x,train_y,
epochs=100, batch_size=8, verbose=1)
model.save("model.h5", hist)
我尝试将 np.array([...]) 更改为 np.array([...],dtype=np.float32) 但随后出现错误
ValueError: setting an array element with a sequence.
我的训练数据形状是
[[[
[...]
[...]
[...]
[...]
],1],...]
如果有人在下面发布答案,我将非常感激。
【问题讨论】:
-
当您将项目转换为numpy数组时,数组中的项目仍然是列表,请尝试打印您的train_x和train_y并查看其中是否包含列表
-
只有矩形的东西可以完全转换成像
np.array([[1,2,3], [1,2]])这样的numpy数组->这不能完全转换成numpy数组而np.array([[1,2,3], [1,2,3]])会 -
但我应该在转换为 numpy 数组之前或之后打印它们
-
一切由您决定,您可以同时打印并查看相同的 xD
-
我打印了 train_x 和 train_y 的形状,得到以下结果:
(7553,)(7553,)
标签: python tensorflow keras