【问题标题】:Failed to convert a NumPy array to a Tensor (Unsupported object type list无法将 NumPy 数组转换为张量(不支持的对象类型列表
【发布时间】: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


【解决方案1】:

好的,感谢@SanchritJain,我解决了问题是我没有调整图像大小。

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 2020-09-09
    • 2021-09-09
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多