def test_lr_plateau(self):
        inputs = np.random.standard_normal((1024, 5))
        outputs = (inputs.dot(np.random.standard_normal(
            (5, 1))).squeeze(axis=-1) > 0).astype('int32')

        model = models.Sequential()
        model.add(
            layers.Dense(
                units=2,
                input_shape=(5, ),
                use_bias=False,
                activation='softmax',
                name='Output',
            ))
        model.compile(
            optimizer=LRMultiplier(AdamV2(), {'Output': 100.0}),
            loss='sparse_categorical_crossentropy',
        )
        model.fit(
            inputs,
            outputs,
            validation_split=0.1,
            epochs=1000,
            callbacks=[
                callbacks.ReduceLROnPlateau(patience=2, verbose=True),
                callbacks.EarlyStopping(patience=5),
            ],
        )

        predicted = model.predict(inputs).argmax(axis=-1)
        self.assertLess(np.sum(np.abs(outputs - predicted)), 20)
Esempio n. 2
0
    def test_nested(self):
        inputs = np.random.standard_normal((1024, 5))
        outputs = (inputs.dot(np.random.standard_normal(
            (5, 1))).squeeze(axis=-1) > 0).astype('int32')

        model = models.Sequential()
        model.add(
            layers.Dense(
                units=5,
                input_shape=(5, ),
                activation='tanh',
                bias_constraint=constraints.max_norm(100.0),
                name='Dense',
            ))
        model.add(layers.Dense(
            units=2,
            activation='softmax',
            name='Output',
        ))
        if TF_KERAS:
            import tensorflow as tf
            base_opt = tf.keras.optimizers.Adam(amsgrad=True, decay=1e-4)
        else:
            base_opt = keras.optimizers.Adam(amsgrad=True, decay=1e-4)
        model.compile(
            optimizer=LRMultiplier(LRMultiplier(base_opt, {'Dense': 1.2}),
                                   {'Output': 2.0}),
            loss='sparse_categorical_crossentropy',
        )
        model.fit(
            inputs,
            outputs,
            validation_split=0.1,
            epochs=1000,
            callbacks=[
                callbacks.ReduceLROnPlateau(patience=2, verbose=True),
                callbacks.EarlyStopping(patience=5),
            ],
        )

        model_path = os.path.join(
            tempfile.gettempdir(),
            'test_lr_multiplier_%f.h5' % np.random.random())
        model.save(model_path)
        model = models.load_model(model_path,
                                  custom_objects=self._get_custom_objects())

        predicted = model.predict(inputs).argmax(axis=-1)
        self.assertLess(np.sum(np.abs(outputs - predicted)), 20)
    def test_nested(self):
        inputs = np.random.standard_normal((1024, 5))
        outputs = (inputs.dot(np.random.standard_normal((5, 1))).squeeze(axis=-1) > 0).astype('int32')

        model = models.Sequential()
        model.add(layers.Dense(
            units=5,
            input_shape=(5,),
            activation='tanh',
            name='Dense',
        ))
        model.add(layers.Dense(
            units=2,
            activation='softmax',
            name='Output',
        ))
        model.compile(
            optimizer=LRMultiplier(LRMultiplier('adam', {'Dense': 1.2}), {'Output': 2.0}),
            loss='sparse_categorical_crossentropy',
        )
        model.fit(
            inputs,
            outputs,
            validation_split=0.1,
            epochs=1000,
            callbacks=[
                callbacks.ReduceLROnPlateau(patience=2, verbose=True),
                callbacks.EarlyStopping(patience=5),
            ],
        )

        if not EAGER_MODE:
            model_path = os.path.join(tempfile.gettempdir(), 'test_lr_multiplier_%f.h5' % np.random.random())
            model.save(model_path)
            model = models.load_model(model_path, custom_objects={'LRMultiplier': LRMultiplier})

        predicted = model.predict(inputs).argmax(axis=-1)
        self.assertLess(np.sum(np.abs(outputs - predicted)), 20)