def test_batch_mean(self): correct = np.array([-2. / 3, 1., 21. / 4]) with clean_session(): array = tf.constant([ [1, -8, 5, 4, 9], [0, 2, 7, 8, 1], [2, -8, 6, 4, 9], ], dtype=tf.float32) mask = tf.constant([ [1, 1, 1, 0, 0], [1, 1, 0, 0, 0], [1, 0, 1, 1, 1], ], dtype=tf.float32) bad_mask = tf.constant([ [1, 1, 1, 0, 0], [0, 0, 0, 0, 0], [1, 0, 1, 1, 1], ], dtype=tf.float32) bm = reduce_mean(SequenceBatch(array, mask)) assert_almost_equal(bm.eval(), correct, decimal=5) bm2 = reduce_mean(SequenceBatch(array, bad_mask)) with pytest.raises(InvalidArgumentError): bm2.eval() # try allow_empty option bm3 = reduce_mean(SequenceBatch(array, bad_mask), allow_empty=True) assert_almost_equal(bm3.eval(), np.array([-2. / 3, 0., 21. / 4]))
def test_multidim(self): npa = lambda arr: np.array(arr, dtype=np.float32) correct = npa([ npa([4, 7, 10]) / 2, npa([8, 14, 20]) / 3, npa([13, 16, 19]) / 3, ]) with clean_session(): array = tf.constant([[[1., 2., 3.], [3., 5., 7.], [0., 0., 0.]], [[2., 4., 6.], [3., 5., 7.], [3., 5., 7.]], [[9., 9., 9.], [3., 5., 7.], [1., 2., 3.]]], dtype=tf.float32) mask = tf.constant([ [1, 1, 0], [1, 1, 1], [1, 1, 1], ], dtype=tf.float32) bm = reduce_mean(SequenceBatch(array, mask)) assert_almost_equal(bm.eval(), correct, decimal=5)
def test(self): npa = lambda arr: np.array(arr, dtype=np.float32) correct = npa([ npa([3, 5, 7]), npa([3, 5, 7]), npa([9, 9, 9]), ]) with clean_session(): array = tf.constant( [[[1., 2., 3.], [3., 5., 7.], [100., 200., 2000.]], [[2., 4., 6.], [3., 5., 7.], [3., 5., 7.]], [[9., 9., 9.], [3., 5., 7.], [1., 2., 3.]]], dtype=tf.float32) mask = tf.constant([ [1, 1, 0], [1, 1, 1], [1, 1, 1], ], dtype=tf.float32) bm = reduce_max(SequenceBatch(array, mask)) assert_almost_equal(bm.eval(), correct, decimal=5) bad_mask = tf.constant([ [0, 0, 0], [1, 1, 1], [1, 1, 1], ], dtype=tf.float32) bm2 = reduce_mean(SequenceBatch(array, bad_mask)) with pytest.raises(InvalidArgumentError): bm2.eval()
def embed_sequences(self, embedded_sequence_batch): return reduce_mean(embedded_sequence_batch, allow_empty=self._allow_empty)
def test_empty(self): with clean_session(): array = tf.constant(np.empty((0, 10, 20))) mask = tf.constant(np.empty((0, 10))) bm = reduce_mean(SequenceBatch(array, mask)) assert bm.eval().shape == (0, 20)