Problem mit geteilten Größenparametern des Tensorflow-Datensatzes: Das lokale Rendezvous wird mit dem Status abgebrochen
Posted: 06 Jan 2025, 22:44
Ziemlich neu mit Datengenerator und Datensatz von Tensorflow. Ich habe Probleme mit der Größenanpassung von Batch, Epochen und Schritten ... Ich kann mir nicht vorstellen, wie man den Fehler „Lokales Rendezvous wird mit Status abgebrochen: OUT_OF_RANGE: Ende der Sequenz“ beseitigt.
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
Ich teile und stapele meine Daten auf diese Weise zum Trainieren/Validieren
Ohne Batch funktionieren alle großartig (model.fit() und model.evaluate())
aber wenn ich Batch verwende, erhalte ich diese Fehlermeldung:
Ich sehe viele Hinweise auf die Epoche „steps_per_epoch“ und die Stapelgröße, finde aber beim Anwenden auf geteilte Daten keine Lösung.
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)