Keras 3 API 文件 / 資料載入 / 音訊資料載入

音訊資料載入

[原始碼]

audio_dataset_from_directory 函式

keras.utils.audio_dataset_from_directory(
    directory,
    labels="inferred",
    label_mode="int",
    class_names=None,
    batch_size=32,
    sampling_rate=None,
    output_sequence_length=None,
    ragged=False,
    shuffle=True,
    seed=None,
    validation_split=None,
    subset=None,
    follow_links=False,
    verbose=True,
)

從目錄中的音訊檔案產生 tf.data.Dataset

如果您的目錄結構是

main_directory/
...class_a/
......a_audio_1.wav
......a_audio_2.wav
...class_b/
......b_audio_1.wav
......b_audio_2.wav

那麼呼叫 audio_dataset_from_directory(main_directory, labels='inferred') 將會回傳一個 tf.data.Dataset,該資料集會產生來自子目錄 class_aclass_b 的音訊檔案批次,以及標籤 0 和 1(0 對應到 class_a,1 對應到 class_b)。

目前僅支援 .wav 檔案。

參數

  • directory:資料所在的目錄。如果 labels"inferred",則它應該包含子目錄,每個子目錄包含一個類別的音訊檔案。否則,會忽略目錄結構。
  • labels:可以是 "inferred"(標籤從目錄結構產生)、None(沒有標籤),或是與目錄中找到的音訊檔案數量相同大小的整數標籤列表/元組。標籤應根據音訊檔案路徑的字母數字順序排序(透過 Python 中的 os.walk(directory) 取得)。
  • label_mode:描述 labels 編碼方式的字串。選項有
    • "int":表示標籤編碼為整數(例如,用於 sparse_categorical_crossentropy 損失)。
    • "categorical" 表示標籤編碼為類別向量(例如,用於 categorical_crossentropy 損失)。
    • "binary" 表示標籤(只能有 2 個)編碼為值為 0 或 1 的 float32 純量(例如,用於 binary_crossentropy)。
    • None(沒有標籤)。
  • class_names:只有在 "labels" 為 "inferred" 時才有效。這是類別名稱的明確列表(必須與子目錄的名稱相符)。用於控制類別的順序(否則使用字母數字順序)。
  • batch_size:資料批次的大小。預設值:32。如果為 None,則資料將不會分批(資料集將產生單獨的樣本)。
  • sampling_rate:音訊取樣率(每秒取樣數)。
  • output_sequence_length:音訊序列的最大長度。長度超過此值的音訊檔案將被截斷為 output_sequence_length。如果設定為 None,則同一批次中的所有序列將被填充到該批次中最長序列的長度。
  • ragged:是否回傳一個 Ragged 資料集(其中每個序列都有自己的長度)。預設值為 False
  • shuffle:是否隨機打亂資料。如果設定為 False,則按字母數字順序排序資料。預設值為 True
  • seed:用於隨機打亂和轉換的可選隨機種子。
  • validation_split:介於 0 和 1 之間的可選浮點數,表示保留用於驗證的資料比例。
  • subset:要回傳的資料子集。可以是 "training""validation""both"。只有在設定了 validation_split 時才使用。
  • follow_links:是否訪問符號連結指向的子目錄。預設值為 False
  • verbose:是否顯示類別數量和找到的檔案數量相關資訊。預設值為 True

回傳值

一個 tf.data.Dataset 物件。

  • 如果 label_modeNone,則它會產生形狀為 (batch_size,)string 張量,其中包含一批音訊檔案的內容。
  • 否則,它會產生一個元組 (audio, labels),其中 audio 的形狀為 (batch_size, sequence_length, num_channels),而 labels 則遵循下面描述的格式。

關於標籤格式的規則

  • 如果 label_modeint,則標籤為形狀為 (batch_size,)int32 張量。
  • 如果 label_modebinary,則標籤為形狀為 (batch_size, 1) 的 1 和 0 的 float32 張量。
  • 如果 label_modecategorical,則標籤為形狀為 (batch_size, num_classes)float32 張量,表示類別索引的 one-hot 編碼。