Skip to content

[BUG Report]: Optimizer is null after loading a saved model #1280

Open
@bhairav-thakkar

Description

@bhairav-thakkar

Description

When loading a previously saved sequential model with optimizer, the loaded model has optimizer = null. This leads to the training NOT continuing from the state before saving.

Reproduction Steps

I created a minimal LSTM network with Adam optimizer. I followed the steps outlined in #1246 (comment) to get model.save working. However, when I tried to load the model, I found the Optimizer to be null. My relevant code blocks are:


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 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");

            Adam a = (Adam)optimizer;


        }


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

            this.optimizer = model.Optimizer;
        }


after loading, this.optimizer is null.

Known Workarounds

No response

Configuration and Other Information

Download the Tensorflow.Net master repo on 03 January 2025 and referenced the Tensorflow.Keras and Tensorflow.Bindings project from my project. Using SciSharp.Tensorflow.Redist 2.16.0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions