def show_test_input(self, network): training_data, validation_data, test_data = load_data_wrapper() group = Group(*[ self.get_set(network, test) for test in test_data[3:20] if test[1] in [4, 9] ]) group.arrange_submobjects(DOWN, buff=MED_LARGE_BUFF) group.scale_to_fit_height(2 * SPACE_HEIGHT - 1) self.play(FadeIn(group))
def get_examples(self): ci = self.curr_index self.curr_index += self.n_examples group = Group( *it.starmap(get_training_image_group, self.data[ci:ci + self.n_examples])) group.arrange_submobjects(DOWN) group.scale(0.5) return group
def get_training_image_group(train_in, train_out): image = MNistMobject(train_in) image.scale_to_fit_height(1) arrow = Vector(RIGHT, color=BLUE, buff=0) output = np.argmax(train_out) output_tex = TexMobject(str(output)).scale(1.5) result = Group(image, arrow, output_tex) result.arrange_submobjects(RIGHT) result.to_edge(UP) return result
def show_maximizing_inputs(self, network): training_data, validation_data, test_data = load_data_wrapper() layer = 1 n_neurons = DEFAULT_LAYER_SIZES[layer] groups = Group() for k in range(n_neurons): out = np.zeros(n_neurons) out[k] = 1 in_vect = maximizing_input(network, layer, out) new_out = network.get_activation_of_all_layers(in_vect)[layer] group = Group(*map(MNistMobject, [in_vect, new_out])) group.arrange_submobjects(DOWN+RIGHT, SMALL_BUFF) groups.add(group) groups.arrange_submobjects_in_grid() groups.scale_to_fit_height(2*SPACE_HEIGHT - 1) self.add(groups)
def construct(self): #self.force_skipping() self.fruit_num = 101 apples = Group(*(Apple() for _ in xrange(self.fruit_num))) apples.arrange_submobjects(buff=0.5) apples.to_edge(LEFT, buff=2.5) pears = Group(*(Pear() for _ in xrange(self.fruit_num))) for apple, pear in zip(apples, pears): pear.move_to(apple) apples.shift(1.5 * UP) pears.shift(1.5 * DOWN) apple_numbers = number_submobjects(apples, direction=UP) pear_numbers = number_submobjects(pears, direction=DOWN) self.play(ShowCreation(apples), Write(apple_numbers)) self.play(ShowCreation(pears), Write(pear_numbers)) #self.dither() apples.submobjects.reverse() pears.submobjects.reverse() apple_numbers.submobjects.reverse() pear_numbers.submobjects.reverse() apples_ori = apples.copy() pears_ori = pears.copy() apple_numbers_ori = apple_numbers.copy() pear_numbers_ori = pear_numbers.copy() apples_persp = apples.copy() pears_persp = pears.copy() apple_numbers_persp = apple_numbers.copy() pear_numbers_persp = pear_numbers.copy() self.camera_distance = 12.0 self.camera_point = apples[-1].get_center() * X_MASK vanishing_point = self.camera_point + self.camera_distance * RIGHT self.darken(apples_persp) self.darken(pears_persp) self.darken(apple_numbers_persp) self.darken(pear_numbers_persp) # perspective shift of numbers self.apply_perspective(apples_persp, objectwise=True) self.apply_perspective(pears_persp, objectwise=True) self.apply_perspective(apple_numbers_persp, objectwise=False) self.apply_perspective(pear_numbers_persp, objectwise=False) self.play( ReplacementTransform(apples, apples_persp), ReplacementTransform(pears, pears_persp), ReplacementTransform(apple_numbers, apple_numbers_persp), ReplacementTransform(pear_numbers, pear_numbers_persp), ) apples = apples_persp pears = pears_persp apple_numbers = apple_numbers_persp pear_numbers = pear_numbers_persp #self.dither() matching = make_ordinal_matching( Ordinal(*apples[1:]), Ordinal(*pears[1:]), ) self.darken(matching) self.play(ShowCreation(matching)) self.dither() matching_straight = matching.copy() # Extra apple self.show_extra_fruit(apples, apples_ori, apple_numbers, apple_numbers_ori, matching, apples[:-1], pears[1:], matching_straight) # Extra pear self.show_extra_fruit(pears, pears_ori, pear_numbers, pear_numbers_ori, matching, apples[1:], pears[:-1], matching_straight) self.dither() self.play(Transform(matching, matching_straight)) definition = TextMobject("Definition:", "$|A| = |B|$") definition.to_edge(UP) self.play(Write(definition[0])) apple_box, apple_label = self.pack_into_box(apples, apple_numbers, UP, 'A', RED, matching, apples, pears) #self.dither() pear_box, pear_label = self.pack_into_box(pears, pear_numbers, DOWN, 'B', YELLOW, matching, apples, pears) #self.dither() self.move_labels_to_definition(apple_label, pear_label, definition[1]) finite_pears = VGroup(*pears_ori[-3:]) finite_pears.move_to(pear_box) pears_dest = VGroup(*[pears[0].copy() for _ in range(len(pears) - 3)]) pears_dest.fade(0) pears_dest.add(*finite_pears.submobjects) self.play( Uncreate(matching), FadeOut(definition[1]), ) self.play(Transform(pears, pears_dest), ) self.remove(pears) self.add(finite_pears) finite_pears.submobjects.reverse() pears = finite_pears #self.dither() def attempt(i0, i1, i2, remove=True): apple_indices = i0, i1, i2 matching = get_matching( pears, Group(*(apples.submobjects[-1 - i] for i in apple_indices))) self.play(ShowCreation(matching), submobject_mode="all_at_once") #self.dither() if remove: self.remove(matching) else: return matching attempt(5, 8, 12) attempt(0, 10, 19) matching = attempt(7, 1, 0, remove=False) def2 = TextMobject(":", "$|A|>|B|$") def2.shift(definition[0][-1].get_center() - def2[0].get_center()) self.move_labels_to_definition(apple_label, pear_label, def2[1]) self.dither()
def get_set(self, network, test): test_in, test_out = test activations = network.get_activation_of_all_layers(test_in) group = Group(*map(MNistMobject, activations)) group.arrange_submobjects(RIGHT, buff = LARGE_BUFF) return group