もうどの位の期間取り組んできたのか忘れた。相当時間掛かってます。Netronでモデルの情報確認してあれこれ試し、
model.export(save_path)
として保存してたのを
tf.saved_model.save(model, saved_model_path, signatures={"serving_default": serve_fn})
にしても結局何かがダメって言われる。この何かが理解不能でCopilotやGeminiで解決図ったが行き詰った。
public class TFShinbaModelInput { [VectorType(1)] [ColumnName("serving_default_Baba")] public int[] Baba { get; set; } [VectorType(1)] [ColumnName("serving_default_Course")] public int[] Course { get; set; } [VectorType(1)] [ColumnName("serving_default_JouCD")] public int[] JouCD { get; set; } ...
新馬戦用でも1,018個の特徴量があったりで
var mlContext = new MLContext(); var inputType = typeof(TFShinbaModelInput); var intColumns = inputType.GetProperties() .Where(p => p.PropertyType == typeof(int[]) && p.GetCustomAttributesData().Any(a => a.AttributeType == typeof(ColumnNameAttribute))) .Select(p => { var attr = p.GetCustomAttributesData() .FirstOrDefault(a => a.AttributeType == typeof(ColumnNameAttribute)); return attr?.ConstructorArguments[0].Value?.ToString() ?? p.Name; }) .ToArray(); var floatColumns = inputType.GetProperties() .Where(p => p.PropertyType == typeof(float[]) && p.GetCustomAttributesData().Any(a => a.AttributeType == typeof(ColumnNameAttribute))) .Select(p => { var attr = p.GetCustomAttributesData() .FirstOrDefault(a => a.AttributeType == typeof(ColumnNameAttribute)); return attr?.ConstructorArguments[0].Value?.ToString() ?? p.Name; }) .ToArray(); var allFeatureColumns = intColumns.Concat(floatColumns).ToArray(); var pipeline = mlContext.Model.LoadTensorFlowModel(Properties.Settings.Default.TF_Shinba) .ScoreTensorFlowModel( outputColumnNames: new[] { "StatefulPartitionedCall" }, inputColumnNames: allFeatureColumns, addBatchDimensionInput: true);
こんな感じでしっかり準備したうえでロードしてるんですが結局ダメでした。
以前確か試した記憶があるんですが、TensorFlowモデルをonnx形式で保存してML.NETでonnx形式を利用する方法を試すべく新たな仮想環境を準備。ってのもtf2onnxはnumpy 2.0以降で削られたnp.castとかの部分がNGでnumpy 1.26.4にダウングレードして試す必要があるようなので、今その環境で新馬戦用モデルの学習してます。それが済んだらonnx形式で保存してML.NETでロードしてまた苦戦する予定😣
0 件のコメント:
コメントを投稿