def test_softmax_derivative_cputensor(): sftmx = Softmax() inputs = np.array([0, 1, -2]).reshape((3, 1)) be = CPU(rng_seed=0) outputs = np.exp(inputs) / np.sum(np.exp(inputs)) errmat = np.ones(inputs.shape) a = np.einsum('ij,ji->i', errmat.T, outputs) outputs = outputs * (errmat - a[np.newaxis, :]) temp = be.zeros(inputs.shape) sftmx.apply_derivative(be, CPUTensor(inputs), temp) assert_tensor_near_equal(CPUTensor(outputs), temp)
def test_softmax_derivative_cc2tensor(): sftmx = Softmax() from neon.backends.cc2 import GPU, GPUTensor inputs = np.array([0, 1, -2]).reshape((3, 1)) outputs = np.exp(inputs) / np.sum(np.exp(inputs)) errmat = np.ones(inputs.shape) a = np.einsum('ij,ji->i', errmat.T, outputs) outputs = outputs * (errmat - a[np.newaxis, :]) be = GPU(rng_seed=0) temp = be.zeros(inputs.shape) sftmx.apply_derivative(be, GPUTensor(inputs), temp) assert_tensor_near_equal(GPUTensor(outputs), temp)