UserWarning: Your input run out of data; das Training unterbrechen. Stellen Sie
sicher, dass Ihr Datensatz oder Generator mindestens
generieren kann
Code: Select all
steps_per_epoch * epochsverwenden
Code: Select all
.repeat()

Der Datensatz besteht aus TXT-Dateien, die 3D-Arrays von Floats enthalten, wobei die beiden inneren Dimensionen Attributsätze sind und die äußeren die Anzahl der Attributsätze (die zwischen den Dateien variieren können). Das bedeutet, dass jede TXT-Datei mehrere Einträge enthält, die für das Training verwendet werden können. Diese Dateien werden dann in gekennzeichneten Ordnern gespeichert. Im Moment sieht die Vorbereitung des Datensatzes in etwa so aus, wie unten dargestellt. Da die TXT-Dateien unterschiedliche Mengen an Einträgen enthalten, versuche ich, die Funktion pathToDataset() zu schreiben, um Datensätze zu generieren, die einzelne Einträge und nicht Stapel gleichzeitig analysieren können.
Code: Select all
# Define the processTXTFile_tf function
def processTXTFile_tf(file_path):
# As the file_path is a tensor, we need to decode it
file_path = file_path.numpy().decode('utf-8')
# Get MFCC NP array
mfccArray = readTXTFile(file_path)
# Add color channel
mfccArray = np.expand_dims(mfccArray, axis=-1)
# Convert to tensor
tensor = tf.convert_to_tensor(mfccArray, dtype=tf.float16)
#print(f"tensor shape: {tensor.shape}")
# Return the tensor
return tensor
# Create a dataset from a file path
def pathToDataset(file_paths):
return (
tf.data.Dataset.from_tensor_slices(file_paths)
.interleave(
lambda file: tf.data.Dataset.from_tensor_slices(
tf.py_function(processTXTFile_tf, [file], [tf.float16])
),
#cycle_length=min(train_len, 16),
num_parallel_calls=tf.data.AUTOTUNE,
)
.unbatch()
.map(lambda x: tf.ensure_shape(x, INPUT_SHAPE)) # Ensure correct shape
)
# Create the x_train_tf dataset
x_train_tf = pathToDataset(x_train)
# Create the y_train_tf dataset
y_train_tf = tf.data.Dataset.from_tensor_slices(y_train)
# Combine x_train_tf and y_train_tf into a single dataset
train_tf = tf.data.Dataset.zip((x_train_tf, y_train_tf)).shuffle(buffer_size=len(x_train), reshuffle_each_iteration=True).batch(BATCH_SIZE).repeat().prefetch(tf.data.AUTOTUNE) # Removed shuffle(buffer_size=len(x_train)) from after batch()
# Create the x_val_tf dataset
x_val_tf = pathToDataset(x_val)
# Create the y_val_tf dataset
y_val_tf = tf.data.Dataset.from_tensor_slices(y_val)
# Combine x_val_tf and y_val_tf into a single dataset
val_tf = tf.data.Dataset.zip((x_val_tf, y_val_tf)).batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE) # Removed shuffle(buffer_size=len(x_train)) from after batch()
Und der aktuelle Datensatz ist hier: ZIP auf Google Drive
Ich glaube, das Problem hängt mit der Warnung zusammen und dass die Interleaves/Datenbankobjekte nicht wie vorgesehen funktionieren ... Aber was genau ist das Problem und wie kann man es lösen?
Mobile version