Beim Tensorflow-Keras-Modell mit Interleave treten Probleme bei der Anpassung aufPython

Python-Programme
Anonymous
 Beim Tensorflow-Keras-Modell mit Interleave treten Probleme bei der Anpassung auf

Post by Anonymous »

Ich arbeite an einem CNN-Projekt, bei dem ich TensorFlow und Keras verwende. Darüber hinaus verwende ich Interleave, da der Datensatz ziemlich groß ist (zu groß, um ihn mit unseren Ressourcen in den RAM zu laden). Aber irgendwo gibt es ein Problem, da das Training bei einer sehr geringen Genauigkeit hängen bleibt und sehr unruhig ist. Außerdem erhalte ich die Warnung:

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 * epochs
Stapel. Möglicherweise müssen Sie
verwenden

Code: Select all

.repeat()
-Funktion beim Erstellen Ihres Datensatzes.

Image

Image

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()
Der vollständige Code ist hier verfügbar: Google Colab
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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post