Browse Source

Add Custom Keras Layer Test

This test is written based on Dueliing DQN' s network structure.
tags/yolov3
lsylusiyao Esther Hu 4 years ago
parent
commit
17a4fe0ba8
1 changed files with 66 additions and 0 deletions
  1. +66
    -0
      test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs

+ 66
- 0
test/TensorFlowNET.Keras.UnitTest/Layers/LayersTest.cs View File

@@ -35,6 +35,72 @@ namespace TensorFlowNET.Keras.UnitTest
var model = keras.Model(inputs, outputs, name: "mnist_model");
model.summary();
}
/// <summary>
/// Custom layer test, used in Dueling DQN
/// </summary>
[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
//__________________________________________________________________________________________________
}

/// <summary>
/// https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding


Loading…
Cancel
Save