C# Tensorflow.net KerasApi AutoEncoder model apply error

19 Views Asked by At

I'm trying to build an AutoEncoder using C# with TensorFlow.NET, but I encountered an error. the Error is :

Tensorflow.InvalidArgumentError: 'Duplicate node name in graph: 'conv2d/Conv2D''

It seems to be an issue of duplicated names, but the layers in TensorFlow.NET's Keras API cannot be set with a name.

I don't understand how to resolve this. Please guide me, and I would appreciate your assistance. Thank you

using Tensorflow;
using Tensorflow.NumPy;
using Tensorflow.Keras.Engine;
using static Tensorflow.Binding;
using static Tensorflow.KerasApi;`

public IModel Encoder()
{

    var inputs = keras.Input(shape: (28,28,1), name:"encoder_input");

    var x = keras.layers.Conv2D(filters: 64, kernel_size: 3, strides: 2, activation: "relu", padding: "same").Apply(inputs);
    x = keras.layers.Conv2D(filters: 128, kernel_size: 3, strides: 2, activation: "relu", padding: "same").Apply(x);
    x = keras.layers.Conv2D(filters: 256, kernel_size: 3, strides: 2, activation: "relu", padding: "same").Apply(x);

    var shape = x.shape; //(4,4,256)

    x = keras.layers.Flatten().Apply(x);

    var latent = keras.layers.Dense(16).Apply(x);

    var encoder = keras.Model(inputs, latent, name: "encoder");
    encoder.summary();


    return encoder;
}//end function`

public IModel Decoder()
{
    // input layer
    var latent_input = keras.Input(shape: 16);

    var x = keras.layers.Dense(4 * 4 * 256).Apply(latent_input);
    x = keras.layers.Reshape((4, 4, 256)).Apply(x);x.Name = "test1";
    x = keras.layers.Conv2DTranspose(filters: 256, kernel_size: 3, strides: 2, activation: "relu",output_padding: "same").Apply(x); x.Name = "test2";
    x = keras.layers.Conv2DTranspose(filters: 128, kernel_size: 3, strides: 2, activation: "relu",output_padding: "same").Apply(x); x.Name = "test3";
    x = keras.layers.Conv2DTranspose(filters: 64, kernel_size: 3, strides: 2, activation: "relu",output_padding: "same").Apply(x); x.Name = "test4";

    var outputs = keras.layers.Conv2DTranspose(filters: 1, kernel_size: 3, /*strides: 2,*/ activation:"sigmoid", output_padding: "same").Apply(x);

    var decoder = keras.Model(latent_input, outputs, name: "decoder");
    decoder.summary();

    return decoder;
}//end function`

public void Autoencoder()
{
    var encoder = Encoder();
    var decoder = Decoder();

    var ganInput = keras.Input(shape: (28, 28, 1));
    var tensor_encoder = encoder.Apply(ganInput); // <--- Error in here
    var tensor_decoder = decoder.Apply(tensor_encoder);

    var autoencoder = keras.Model(ganInput, tensor_decoder, name:"autoencoder");
    autoencoder.summary();

    var optimizer = keras.optimizers.Adam(2e-4f, 0.5f);
    var loss = keras.losses.MeanSquaredError();
    autoencoder.compile(optimizer: optimizer, loss: loss);

}//end function

this is my using library;

0

There are 0 best solutions below