// dropout
val = np.random.random((100, 100))
x_list = [k.variable(val) for k in BACKENDS]
z_list = []
for x, k in zip(x_list, BACKENDS):
z_list.append(k.eval(k.dropout(x, level=0.2)))
for i in range(len(z_list) - 1):
assert z_list[i].shape == z_list[i + 1].shape
// dropout patterns are different, only check mean
assert np.abs(z_list[i].mean() - z_list[i + 1].mean()) < 0.05
check_two_tensor_operation("binary_crossentropy", (4, 2), (4, 2), BACKENDS, from_logits=True)
// cross_entropy call require the label is a valid probability distribution,
// otherwise it is garbage in garbage out...
// due to the algo difference, we can"t guarantee CNTK has the same result on the garbage input.
// so create a seperate test case for valid lable input
check_two_tensor_operation("categorical_crossentropy", (4, 2), (4, 2), [KTH, KTF], from_logits=True)
check_cross_entropy_with_valid_probability_distribution()
check_two_tensor_operation("binary_crossentropy", (4, 2), (4, 2), BACKENDS, from_logits=False)
check_two_tensor_operation("categorical_crossentropy", (4, 2), (4, 2), BACKENDS, from_logits=False)
check_single_tensor_operation("l2_normalize", (4, 3), BACKENDS, axis=-1)
check_single_tensor_operation("l2_normalize", (4, 3), BACKENDS, axis=1)
// Test invalid use cases
for x, k in zip(x_list, [KTH, KTF]):
with pytest.raises(ValueError):
z = k.dropout(x, level=-0.5)
def test_in_top_k(self):
batch_size = 20
num_classes = 10
After Change
// due to the algo difference, we can"t guarantee CNTK has the same result on the garbage input.
// so create a seperate test case for valid lable input
check_two_tensor_operation("categorical_crossentropy", (4, 2), (4, 2), [KTH, KTF], from_logits=True)
xval = np.asarray([[0.26157712, 0.0432167], [-0.43380741, 0.30559841],
[0.20225059, -0.38956559], [-0.13805378, 0.08506755]], dtype=np.float32)
yval = np.asarray([[0.46221867, 0.53778133], [0.51228984, 0.48771016],
[0.64916514, 0.35083486], [0.47028078, 0.52971922]], dtype=np.float32)
check_two_tensor_operation("categorical_crossentropy", xval, yval,
BACKENDS, cntk_two_dynamicity=True, from_logits=True)