Tensorflow.Net: Wie lade ich ein mit model.Save() gespeichertes sequentielles Modell?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Tensorflow.Net: Wie lade ich ein mit model.Save() gespeichertes sequentielles Modell?

Post by Guest »

Ich beginne gerade mit Tensorflow.Net (0.150.0) auf .Net (8.0). Ich habe gerade ein grundlegendes sequentielles Modell erstellt und es erfolgreich gespeichert. Ich kann es jedoch nicht als sequentielles Modell zurückladen. Ich zerbreche mir schon seit einiger Zeit den Kopf darüber und hoffe, dass hier draußen jemand den Ausweg kennt. Ich habe die (wenigen) online verfügbaren Beispiele in Bezug auf Tensorflow.Net überprüft, bin aber irgendwie nicht in der Lage, den Engpass zu überwinden. Kann mir bitte jemand zeigen, wo ich den Fehler mache, oder mich in die richtige Richtung weisen? Vielen Dank für Ihre Zeit und Hilfe.
BuildModel(), CompileModel(), SaveModel() und LoadModel() sind wie folgt. Wie bereits erwähnt, erstellt SaveModel tatsächlich:
  • fingerprint.pb
  • keras_metadata.pb
  • saved_model.pb
  • Variablen [Ordner]
  • Assets [Ordner]
Wenn ich jedoch versuche, das LoadModel zu verwenden Methode erhalte ich:
Image
< /p>
Ich hoffe, dass ich keine Details vermisse. Gerne teile ich Ihnen bei Bedarf weitere Einzelheiten mit.
Mein Code:

Code: Select all


public void BuildModel()
{
var seqArgs = new Tensorflow.Keras.ArgsDefinition.SequentialArgs()
{
Name = "LSTMModel",
InputShape = new Tensorflow.Shape(TimeSteps, 1),
};
model = new Sequential(seqArgs);

for (int i = 0; i < NumberOfLayers; i++)
{
var lstmArgs = new Tensorflow.Keras.ArgsDefinition.LSTMArgs()
{
Units = NumberOfCells,
ReturnSequences = i < NumberOfLayers - 1,
InputShape = i == 0 ? new Tensorflow.Shape(TimeSteps, 1) : null,
Activation = new Tensorflow.Keras.Activations().Tanh,
RecurrentActivation = new Tensorflow.Keras.Activations().Sigmoid,
ActivityRegularizer = new Tensorflow.Keras.Regularizers().l2(L2Regularization)
};
var lstm = new LSTM(lstmArgs);
model.add(lstm);

if (i < NumberOfLayers - 1)
{
var args = new Tensorflow.Keras.ArgsDefinition.DropoutArgs()
{
Rate = DropoutRate,
};
var dropout = new Dropout(args);
model.add(dropout);
}
}

var denseArgs = new Tensorflow.Keras.ArgsDefinition.DenseArgs()
{
Units = 1,
KernelRegularizer = new Tensorflow.Keras.Regularizers().l2(L2Regularization)
};
var dense = new Dense(denseArgs);
model.add(dense);
}

public void CompileModel()
{
var lf = new Tensorflow.Keras.Losses.MeanSquaredError();
var optimizer = new Adam(learning_rate: LearningRate);
model.compile(optimizer: optimizer, loss: lf);
}

public void SaveModel()
{
var tf = Tensorflow.Binding.tf;
string dir = @"C:\Users\bhair\Desktop\tmp";
var modelPath = Path.Combine(dir, "LSTMModel");
model.save(filepath: modelPath, overwrite: true, include_optimizer: true, save_format: "tf");
}

public void LoadModel()
{
var tf = Tensorflow.Binding.tf;
string dir = @"C:\Users\bhair\Desktop\tmp";
var modelPath = Path.Combine(dir, "LSTMModel");
var x = tf.keras.models.load_model(modelPath);
model = (Sequential)x;
}

Ich habe verschiedene Ansätze zum Laden des Modells ausprobiert, aber meistens bin ich auf die Fehlermeldung „Nicht implementiert“ gestoßen. Ich habe sogar den Co-Piloten gefragt, aber der Co-Pilot drehte sich im Kreis und konnte nichts Nützliches vorschlagen. Ich habe die sehr wenigen Beispiele im Zusammenhang mit Tensorflow.Net überprüft. https://github.com/SciSharp/TensorFlow.NET/issues/932 legt nahe, dass das Problem schon vor langer Zeit gelöst wurde, auch auf der GPU. Ich versuche, CPU zu sparen, schaffe es aber nicht!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post