I Versuchen Sie es mit der Größe eines vom Datengenerator aufgerufenen Teils meiner Daten und versuchen Sie es mit der vollständigen Größe meines gesamten Datensatzes und der Größe des geteilten Datensatzes, aber niemand scheint zu funktionieren.
Hier ein vereinfachter Code von mein letzter Versuch
Code: Select all
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
Code: Select all
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)
))
Code: Select all
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))
aber wenn ich Batch verwende, erhalte ich diese Fehlermeldung:
Code: Select all
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)