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;