def setUp(self): RnnClass = self.get_mdrnn_class() self.rnn2d = RnnClass(units=1, input_shape=(None, None, 1), kernel_initializer=initializers.Identity(), recurrent_initializer=initializers.Identity(1), bias_initializer=initializers.Constant(-1), return_sequences=True, activation=None) self.x = np.arange(6).reshape((1, 2, 3, 1)) self.initial_state = [tf.ones(shape=(1, 1)), tf.ones(shape=(1, 1))]
def test_result(self): rnn2d = MDRNN(units=1, input_shape=(None, None, 1), kernel_initializer=initializers.Identity(), recurrent_initializer=initializers.Identity(1), bias_initializer=initializers.Constant(-1), return_sequences=True, activation=None) x = np.arange(6).reshape((1, 2, 3, 1)) actual = rnn2d.call(x) desired = np.array([ [-1, -1, 0], [1, 3, 7] ]).reshape((1, 2, 3, 1)) np.testing.assert_almost_equal(desired, actual.numpy(), 6)
def test_2drnn_output_when_providing_initial_state(self): rnn2d = MDRNN(units=1, input_shape=(None, None, 1), kernel_initializer=initializers.Identity(), recurrent_initializer=initializers.Identity(1), bias_initializer=initializers.Constant(-1), return_sequences=True, activation=None) x = np.arange(6).reshape((1, 2, 3, 1)) initial_state = [tf.ones(shape=(1, 1)), tf.ones(shape=(1, 1))] actual = rnn2d.call(x, initial_state=initial_state) desired = np.array([ [1, 1, 2], [3, 7, 13] ]).reshape((1, 2, 3, 1)) np.testing.assert_almost_equal(desired, actual.numpy(), 6)
def test_result_after_running_rnn_on_3d_input(self): rnn3d = MDRNN(units=1, input_shape=(None, None, None, 1), kernel_initializer=initializers.Identity(), recurrent_initializer=initializers.Identity(1), bias_initializer=initializers.Constant(1), return_sequences=True, return_state=True, activation=None) x = np.arange(2 * 2 * 2).reshape((1, 2, 2, 2, 1)) outputs, state = rnn3d.call(x) desired = np.array([[[1, 3], [4, 11]], [[6, 15], [17, 51]]]).reshape( (1, 2, 2, 2, 1)) np.testing.assert_almost_equal(desired, outputs.numpy(), 6) desired_state = desired[:, -1, -1, -1] np.testing.assert_almost_equal(desired_state, state.numpy(), 6)
def test_recurrent_weights_are_working(self): mdrnn = self.create_default_mdrnn( kernel_initializer=initializers.Zeros(), recurrent_initializer=initializers.Identity(), bias_initializer=initializers.Zeros(), activation=None ) initial_state = np.array([1, 2, 3]).reshape(1, -1) initial_state = tf.constant(initial_state, dtype=tf.float32) expected_result = np.array([[1, 2, 3]]) self.assert_model_predicts_correct_result(expected_result, mdrnn, self.x, initial_state=initial_state)
def test_kernel_weights_are_working(self): mdrnn = self.create_default_mdrnn( kernel_initializer=initializers.Identity(), recurrent_initializer=initializers.Zeros(), bias_initializer=initializers.Zeros(), activation=None, return_sequences=True ) x1 = np.array([1, 2, 3]) x = np.array([[x1]]) a = mdrnn.call(x) expected_result = x.copy() np.testing.assert_almost_equal(expected_result, a.numpy(), 8)