Я попробуйте использовать размер части моих данных, вызванный генератором данных, и попробуйте использовать полный размер всего моего набора данных и размер разделенного набора данных, но, похоже, никто не работает.
Вот упрощенный код из моей последней попытки
Код: Выделить всё
def data_generator(df, chunk_size):
total_number_sample = 10000
for start_idx in range(1, total_number_sample , chunk_size):
end_idx = start_idx + chunk_size-1
df_subset = df.where(col('idx').between(start_idx, end_idx))
feature = np.array(df_subset.select("vector_features_scaled").rdd.map(lambda row: row[0].toArray()).collect())
label = df_subset.select("ptype_s_l_m_v").toPandas().values.flatten()
yield feature, label
Код: Выделить всё
dataset = tf.data.Dataset.from_generator(
lambda: data_generator(df, chunk_size),
output_signature=(
tf.TensorSpec(shape=(None, 24), dtype=tf.float32),
tf.TensorSpec(shape=(None, 4), dtype=tf.float32)
))
Код: Выделить всё
batch_sz = 100
split_ratio = .9
split_size = math.floor((chunk_size*10) * split_ratio)
train_dataset = dataset.take(split_size).batch(batch_sz)
train_dataset = train_dataset.prefetch(tf.data.experimental.AUTOTUNE)
test_dataset = dataset.skip(split_size).batch(batch_sz)
test_dataset = test_dataset.prefetch(tf.data.experimental.AUTOTUNE)
steps_per_epoch=math.ceil(10000 * split_ratio) / batch_sz)
validation_steps=math.ceil((10000-split_size)) / batch_sz)
model.fit(train_dataset,
steps_per_epoch=steps_per_epoch,
epochs=3,
validation_data=test_dataset,
validation_steps=validation_steps,
verbose=2)
results = model.evaluate(dataset.batch(batch_sz))
но когда я использую пакетную обработку, я получаю эту ошибку:
Код: Выделить всё
W tensorflow/core/framework/local_rendezvous.cc:404] Local rendezvous is aborting with status: OUT_OF_RANGE: End of sequence
[[{{node IteratorGetNext}}]]
/usr/lib/python3.11/contextlib.py:155: UserWarning: Your input ran out of data; interrupting training. Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches. You may need to use the `.repeat()` function when building your dataset.
self.gen.throw(typ, value, traceback)
Подробнее здесь: https://stackoverflow.com/questions/793 ... -is-aborti