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)
我正在关注 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)