diff --git a/test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs b/test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs
index 57af6b16..f7e6155c 100644
--- a/test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs
+++ b/test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs
@@ -35,6 +35,72 @@ namespace TensorFlowNET.Keras.UnitTest
var model = keras.Model(inputs, outputs, name: "mnist_model");
model.summary();
}
+
+ ///
+ /// Custom layer test, used in Dueling DQN
+ ///
+ [TestMethod, Ignore]
+ public void FunctionalTest()
+ {
+ var layers = keras.layers;
+ var inputs = layers.Input(shape: 24);
+ var x = layers.Dense(128, activation:"relu").Apply(inputs);
+ var value = layers.Dense(24).Apply(x);
+ var adv = layers.Dense(1).Apply(x);
+
+ var adv_out = adv - Binding.tf.reduce_mean(adv, axis: 1, keepdims: true); // Here's problem.
+ var outputs = layers.Add().Apply(new Tensors(adv_out, value));
+ var model = keras.Model(inputs, outputs);
+ model.summary();
+ model.compile(optimizer: keras.optimizers.RMSprop(0.001f),
+ loss: keras.losses.MeanSquaredError(),
+ metrics: new[] { "acc" });
+ // Here we consider the adv_out is one layer, which is a little different from py's version
+ Assert.AreEqual(model.Layers.Count, 6);
+
+ // py code:
+ //from tensorflow.keras.layers import Input, Dense, Add, Subtract, Lambda
+ //from tensorflow.keras.models import Model
+ //from tensorflow.keras.optimizers import RMSprop
+ //import tensorflow.keras.backend as K
+
+ //inputs = Input(24)
+ //x = Dense(128, activation = "relu")(inputs)
+ //value = Dense(24)(x)
+ //adv = Dense(1)(x)
+ //meam = Lambda(lambda x: K.mean(x, axis = 1, keepdims = True))(adv)
+ //adv = Subtract()([adv, meam])
+ //outputs = Add()([value, adv])
+ //model = Model(inputs, outputs)
+ //model.compile(loss = "mse", optimizer = RMSprop(1e-3))
+ //model.summary()
+
+ //py output:
+ //Model: "functional_3"
+ //__________________________________________________________________________________________________
+ //Layer(type) Output Shape Param # Connected to
+ //==================================================================================================
+ //input_2 (InputLayer) [(None, 24)] 0
+ //__________________________________________________________________________________________________
+ //dense_3 (Dense) (None, 128) 3200 input_2[0][0]
+ //__________________________________________________________________________________________________
+ //dense_5 (Dense) (None, 1) 129 dense_3[0][0]
+ //__________________________________________________________________________________________________
+ //lambda_1 (Lambda) (None, 1) 0 dense_5[0][0]
+ //__________________________________________________________________________________________________
+ //dense_4 (Dense) (None, 24) 3096 dense_3[0][0]
+ //__________________________________________________________________________________________________
+ //subtract_1 (Subtract) (None, 1) 0 dense_5[0][0]
+ // lambda_1[0][0]
+ //__________________________________________________________________________________________________
+ //add_1 (Add) (None, 24) 0 dense_4[0][0]
+ // subtract_1[0][0]
+ //==================================================================================================
+ //Total params: 6,425
+ //Trainable params: 6,425
+ //Non-trainable params: 0
+ //__________________________________________________________________________________________________
+ }
///
/// https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding