もうどの位の期間取り組んできたのか忘れた。相当時間掛かってます。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でロードしてまた苦戦する予定😣
2025.7.14 23:02
ひゃ~! onnx形式で行けた😂 これでちょっと先が見えたので、一気に進めます😉
0 件のコメント:
コメントを投稿