Exemple #1
0
    def test_parse_interface_vector(self):
        output_size = 10
        batch_size = 2
        memory_config = {
            'memory_size': None,
            'word_size': 5,
            'num_read_heads': 2,
        }
        interface_vector_size = 38
        interface = np.random.uniform(-3, 3,
                                      (batch_size, interface_vector_size))
        interface = interface.astype(np.float32)

        def softmax_dim1(x):
            y = np.atleast_2d(x)
            y = y - np.expand_dims(np.max(y, axis=1), 1)
            y = np.exp(y)
            y_summed = np.expand_dims(np.sum(y, axis=1), 1)
            return y / y_summed

        expected_interface = {
            "read_keys":
            np.reshape(interface[:, :10], (-1, 5, 2)),
            "read_strengths":
            1 + np.log(np.exp(np.reshape(interface[:, 10:12], (
                -1,
                2,
            ))) + 1),
            "write_key":
            np.reshape(interface[:, 12:17], (-1, 5, 1)),
            "write_strength":
            1 + np.log(np.exp(np.reshape(interface[:, 17], (-1, 1))) + 1),
            "erase_vector":
            1.0 / (1 + np.exp(-1 * np.reshape(interface[:, 18:23], (-1, 5)))),
            "write_vector":
            np.reshape(interface[:, 23:28], (-1, 5)),
            "free_gates":
            1.0 / (1 + np.exp(-1 * np.reshape(interface[:, 28:30], (-1, 2)))),
            "allocation_gate":
            1.0 / (1 + np.exp(-1 * interface[:, 30, np.newaxis])),
            "write_gate":
            1.0 / (1 + np.exp(-1 * interface[:, 31, np.newaxis])),
            "read_modes":
            softmax_dim1(np.reshape(interface[:, 32:], (-1, 3, 2))),
        }

        dnc = DNC(output_size, controller_units=64, **memory_config)
        parsed_interface = dnc._parse_interface_vector(interface)._asdict()

        for item in expected_interface:
            with self.subTest(name=item):
                self.assertAllClose(
                    parsed_interface[item],
                    expected_interface[item],
                )
Exemple #2
0
    def test_parse_interface_vector(self):
        output_size = 10
        batch_size = 2
        controller_config = {
            "hidden_size": 64,
        }
        memory_config = {
            'read_heads_num': 2,
            'word_size': 5,
            'words_num': None,
        }
        interface_vector_size = 38
        interface = np.random.uniform(
            -3, 3, (batch_size, interface_vector_size)).astype(np.float32)

        def softmax_dim1(x):
            y = np.atleast_2d(x)
            y = y - np.expand_dims(np.max(y, axis=1), 1)
            y = np.exp(y)
            y_summed = np.expand_dims(np.sum(y, axis=1), 1)
            return y / y_summed

        expected_interface = {
            "read_keys":
            np.reshape(interface[:, :10], (-1, 5, 2)),
            "read_strengths":
            1 + np.log(np.exp(np.reshape(interface[:, 10:12], (
                -1,
                2,
            ))) + 1),
            "write_key":
            np.reshape(interface[:, 12:17], (-1, 5, 1)),
            "write_strength":
            1 + np.log(np.exp(np.reshape(interface[:, 17], (-1, 1))) + 1),
            "erase_vector":
            1.0 / (1 + np.exp(-1 * np.reshape(interface[:, 18:23], (-1, 5)))),
            "write_vector":
            np.reshape(interface[:, 23:28], (-1, 5)),
            "free_gates":
            1.0 / (1 + np.exp(-1 * np.reshape(interface[:, 28:30], (-1, 2)))),
            "allocation_gate":
            1.0 / (1 + np.exp(-1 * interface[:, 30, np.newaxis])),
            "write_gate":
            1.0 / (1 + np.exp(-1 * interface[:, 31, np.newaxis])),
            "read_modes":
            softmax_dim1(np.reshape(interface[:, 32:], (-1, 3, 2))),
        }

        dnc = DNC(controller_config,
                  memory_config,
                  output_size,
                  classic_dnc_output=False)
        parse_op = dnc._parse_interface_vector(interface)
        init_op = tf.global_variables_initializer()
        with self.test_session() as sess:
            init_op.run()
            interface = sess.run(parse_op)
            parsed_interface = interface._asdict()

        for item in expected_interface.keys():
            with self.subTest(name=item):
                self.assertAllClose(
                    parsed_interface[item],
                    expected_interface[item],
                )