ValueError: Expect x to be a non-empty array or dataset (Tensor Flow lite model maker on Collab)

ValueError: Expect x to be a non-empty array or dataset (Tensor Flow lite model maker on Collab)

我正在关注 this 关于在 Collab 上使用 TensorFlow lite Model Maker 创建自定义模型的教程。

import pathlib
path = pathlib.Path('/content/employee_pics') 
count = len(list(path.glob('*/*.jpg')))
count

data = ImageClassifierDataLoader.from_folder(path)
train_data, test_data = data.split(0.5)

我对第 2 步有疑问:

model = image_classifier.create(train_data)

我收到一个错误: ValueError:期望 x 是一个非空数组或数据集。

我是不是做错了什么?不过,示例中提供的数据集工作正常。为什么?

我刚刚做了一些手动测试。 不知道为什么,但是对于这个二元分类器,当我增加数据量以确保每个标签至少有 16 个图像用于训练时,它开始工作。

对于您的情况,因为您将 train/test 拆分为 0.5 倍,所以每个标签需要 32 张图像。您可以尝试一下是否可以解决您的问题?

这个错误是由于训练数据的大小小于batch_size造成的,这是不允许的。

默认batch_size为32,即训练图像数量不少于32,无需统计每个标签的图像数量,只需要保证总训练图片至少为 32 张。

您需要选择以下方案之一来解决。

  • 设置 batch_size 小于训练数据大小,例如:
image_classifier.create(train_data, batch_size=4)
  • 通过添加更多数据来增加训练数据的大小。

有同样的错误:

File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py", line 1110, in fit
    raise ValueError('Expect x to be a non-empty array or dataset.')
ValueError: Expect x to be a non-empty array or dataset.

首先尝试减小批量大小。如果批量大小大于训练数据集,则不会创建输入数据集,因此保持为空。但是我的不是这样。

然后我试着看看我的数据集在哪里变空了。我的第一个纪元 运行 很好,但不是另一个。似乎我的数据集在批处理过程中得到了 t运行sformed。

classes = len(y.unique())
model = Sequential()
model.add(Dense(10, activation='relu', 
activity_regularizer=tf.keras.regularizers.l1(0.00001)))
model.add(Dense(classes, activation='softmax', name='y_pred'))
opt = Adam(lr=0.0005, beta_1=0.9, beta_2=0.999)

BATCH_SIZE = 12
train_dataset, validation_dataset =set_batch_size(BATCH_SIZE,train_dataset,validation_dataset)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics['accuracy'])
model.fit(_train_dataset, epochs=10,validation_data=_validation_dataset,verbose=2, callbacks=callbacks)

本例解决方案: 更新了训练和验证数据集的冗余更新,同时通过给定不同的名称将其分成批次。

之前:

train_dataset, validation_dataset = set_batch_size(BATCH_SIZE, train_dataset, validation_dataset)

之后:

_train_dataset, _validation_dataset = set_batch_size(BATCH_SIZE, train_dataset, validation_dataset)




classes = len(y.unique())   
model = Sequential()
model.add(Dense(10, activation='relu',activity_regularizer=tf.keras.regularizers.l1(0.00001)))
model.add(Dense(classes, activation='softmax', name='y_pred'))  

opt = Adam(lr=0.0005, beta_1=0.9, beta_2=0.999)

BATCH_SIZE = 12

_train_dataset, _validation_dataset = set_batch_size(BATCH_SIZE, train_dataset, validation_dataset) model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model.fit(_train_dataset, epochs=10, validation_data=_validation_dataset, verbose=2, callbacks=callbacks)

有用的链接:https://code.ihub.org.cn/projects/124/repository/commit_diff?changeset=1fb8f4988d69237879aac4d9e3f268f837dc0221