def check_forward(self, x_data, t_data, w_data, samples_data): x = chainer.Variable(x_data) t = chainer.Variable(t_data) w = chainer.Variable(w_data) samples = chainer.Variable(samples_data) y = functions.black_out(x, t, w, samples, self.reduce) expect_y = numpy.empty((self.batch_size), dtype=numpy.float32) for b in range(self.batch_size): z = 0 for i in range(self.n_samples): w = self.samples[b, i] z += numpy.exp(self.W[w].dot(self.x[b])) y0 = self.W[self.t[b]].dot(self.x[b]) z += numpy.exp(y0) l = y0 - numpy.log(z) for i in range(self.n_samples): w = self.samples[b, i] l += numpy.log(1 - numpy.exp(self.W[w].dot(self.x[b])) / z) expect_y[b] = l if self.reduce == 'mean': loss = -numpy.sum(expect_y) / self.batch_size else: loss = -expect_y testing.assert_allclose(y.data, loss, atol=1.e-4)
def _black_out(x, t, W, samples): return functions.black_out(x, t, W, samples, self.reduce)