2025/04/13

ディープラーニングを諦めた訳ではない

ここにも何度となく色々な事にチャレンジしている事は書いてます。まあ、その主軸はディープラーニングであるTensorFlowなんですが、これ自体は本来ってかPythonで使うものなので自分自身がPythonをあまり好きになれず、ってかねぇ、60歳過ぎて手を出した訳だし自分の脳が馴染めないだけなんだけど...いや、そもそもテキストベースなのがねぇって言い訳してた。

先日何だったかやってた時にOSが開発者モード(?)じゃないとか言われて

設定にあるこれをオンにしたんですが、以前Visual StudioでPython環境整備している時にシェルスクリプトだったか許可されないからって感じで使えなかった理由がこれなんじゃと思い確認してみるとVisual Studioで無事(実際には無事にとは行かないが、毎回指定すれば)にAnacondaの仮想Python環境で行ける様になり単純なTensorFlowでの多変量多出力回帰をしてみた。CopilotとGeminiに相談しながらなんとか行けました。

CSVファイルはpandas使って

  1. import pandas as pd
  2.  
  3. # CSVファイルの読み込み
  4. data = pd.read_csv("MRaceJuni.csv") # ファイル名を適宜変更

入出力の指定して

  1. # 入力データ(特徴量)
  2. X = data[[
  3. "JouCD", "KaisaiTuki", "KaisaiKai", "KaisaiNichi",
  4. "TrackCD", "Course", "Kyori", "Tousu", "Tenko", "Baba",
  5. "KyosouShubetu", "KyosouJouken", "JuuryoShubetu",
  6. "Uma1Souha", "Uma2Souha", "Uma3Souha", "Uma4Souha",
  7. "Uma5Souha", "Uma6Souha", "Uma7Souha", "Uma8Souha",
  8. "Uma9Souha", "Uma10Souha", "Uma11Souha", "Uma12Souha",
  9. "Uma13Souha", "Uma14Souha", "Uma15Souha", "Uma16Souha",
  10. "Uma17Souha", "Uma18Souha"
  11. ]]
  12.  
  13. # 出力データ(ターゲット)
  14. Y = data[[
  15. "Umaban1", "Umaban2", "Umaban3", "Umaban4", "Umaban5",
  16. "Umaban6", "Umaban7", "Umaban8", "Umaban9", "Umaban10",
  17. "Umaban11", "Umaban12", "Umaban13", "Umaban14", "Umaban15",
  18. "Umaban16", "Umaban17", "Umaban18"
  19. ]]

後は今までと同じ感じでデータ準備とTensorFlow特有の層を指定して学習が

  1. from sklearn.model_selection import train_test_split
  2. from sklearn.preprocessing import StandardScaler
  3.  
  4. # データ分割
  5. X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
  6.  
  7. # 標準化
  8. scaler = StandardScaler()
  9. X_train = scaler.fit_transform(X_train)
  10. X_test = scaler.transform(X_test)
  11.  
  12. import tensorflow as tf
  13. from tensorflow.keras import Model, Input
  14. from tensorflow.keras.layers import Dense
  15.  
  16. # 入力層を定義
  17. input_layer = Input(shape=(X_train.shape[1],))
  18.  
  19. # 隠れ層と出力層
  20. x = Dense(64, activation='relu')(input_layer)
  21. x = Dense(32, activation='relu')(x)
  22. output_layer = Dense(Y_train.shape[1])(x)
  23.  
  24. # モデルを構築
  25. model = Model(inputs=input_layer, outputs=output_layer)
  26.  
  27. # モデルのコンパイル
  28. model.compile(optimizer='adam', loss='mse')
  29.  
  30. # モデルの訓練
  31. history = model.fit(X_train, Y_train, epochs=50, batch_size=32, validation_split=0.2)

出来たモデルの結果を

  1. # 予測
  2. predictions = model.predict(X_test)
  3.  
  4. # 結果表示
  5. print(predictions)

まあ、これまでのRMSEに馴染みがあるので

  1. from sklearn.metrics import mean_squared_error
  2. import numpy as np
  3.  
  4. # 平均二乗誤差(MSE)を計算
  5. mse = mean_squared_error(Y_test, predictions)
  6.  
  7. # 平方根を取ってRMSEを計算
  8. rmse = np.sqrt(mse)
  9. print(f"Root Mean Squared Error: {rmse}")

って感じにすれば感覚つかみ易いですね。で、出来上がったモデルをどうやって利用するかが問題なんです。H5とかで保存やonnxもあり、まあ、この辺りも以前から苦労してた記憶がありますが

  1. # SavedModel形式で保存
  2. model.export('my_saved_model')

としてTensorFlowのSavedModel形式で保存してTensorFlow.NETでVisual Studioのc#で利用しようかと思ってますが、また躓くかもです😓

0 件のコメント:

コメントを投稿