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], )
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], )