データセット分割(やりなおし)
📌 次にやること:データセットの分割のやり直し
✅ 02_data_splitting.ipynb
の修正と適用を開始する。
- 目的:RNN、CNN + LSTM、今後のモデルが全て共通のデータを使うように統一する
- 最短時間で修正し、すぐに次のステップ(CNN + LSTM の再学習)に進む。
📌 修正する内容
1️⃣ データ分割の統一
- 訓練データ(Train)
- 検証データ(Validation)
- テストデータ(Test)
- 全モデルが同じ分割を使うように変更
2️⃣ データの保存形式を統一
- X_train.npy, X_val.npy, X_test.npy
- y_train.npy, y_val.npy, y_test.npy
- 全てのモデルがこのデータを使うようにする
3️⃣ ラベルの形式を統一(One-Hot Encoding)
- 異なるモデル間で統一されたラベルフォーマットを適用する
4️⃣ 正規化(Min-Max Scaling)
- モデル間でスケールの不一致が起こらないように統一する
📌修正を適用
🚀 データセットの分割 (02_data_splitting(やり
を修正し、データを統一する。
し).ipynb)なお
🚀 修正が完了したら、次に進む。(CNN + LSTM の再学習)
📢 データセットの分割 (
の作成02_data_splitting(やりなおし).ipynb)
import os
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.utils import to_categorical
# データ保存先
DATA_DIR = "./data/"
if not os.path.exists(DATA_DIR):
os.makedirs(DATA_DIR)
# ✅ 保存した特徴量(MFCC)とラベルデータをロード
features_path = os.path.join(DATA_DIR, "features.npy")
labels_path = os.path.join(DATA_DIR, "labels.npy")
X = np.load(features_path) # 特徴量データ
y = np.load(labels_path) # ラベルデータ
# ✅ ラベルデータを One-Hot Encoding に変換
y = to_categorical(y)
# ✅ 特徴量データの正規化(Min-Max Scaling)
scaler = MinMaxScaler()
X = scaler.fit_transform(X.reshape(-1, X.shape[-1])).reshape(X.shape)
# ✅ データセットを分割(80% 訓練, 10% 検証, 10% テスト)
X_train, X_temp, y_train, y_temp = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=np.argmax(y, axis=1)
)
X_val, X_test, y_val, y_test = train_test_split(
X_temp, y_temp, test_size=0.5, random_state=42, stratify=np.argmax(y_temp, axis=1)
)
# ✅ 分割結果を確認
print(f"訓練データ: {X_train.shape}, 検証データ: {X_val.shape}, テストデータ: {X_test.shape}")
print(f"訓練ラベル: {y_train.shape}, 検証ラベル: {y_val.shape}, テストラベル: {y_test.shape}")
# ✅ 分割後のデータを保存
np.save(os.path.join(DATA_DIR, "X_train.npy"), X_train)
np.save(os.path.join(DATA_DIR, "X_val.npy"), X_val)
np.save(os.path.join(DATA_DIR, "X_test.npy"), X_test)
np.save(os.path.join(DATA_DIR, "y_train.npy"), y_train)
np.save(os.path.join(DATA_DIR, "y_val.npy"), y_val)
np.save(os.path.join(DATA_DIR, "y_test.npy"), y_test)
print("✅ データセットの分割と保存が完了しました。")
修正した 02_data_splitting.ipynb
のロジックを提供します。これにより、すべてのモデルが統一されたデータを使用できるようになります。
次のステップ: 修正を適用し、統一データを使って CNN + LSTM の再学習を開始 します!