コード例 #1
0
 def test_return_last_splits(self):
     inputs = layers.Input(shape=(None,))
     embed = layers.Embedding(input_dim=10, output_dim=100)(inputs)
     outputs = ONLSTM(units=50, chunk_size=5, return_splits=True)(embed)
     model = models.Model(inputs=inputs, outputs=outputs)
     model.compile(optimizer='adam', loss='mse')
     model.summary(line_length=120)
     predicted = model.predict(np.random.randint(0, 10, (3, 7)))
     self.assertEqual((3, 50), predicted[0].shape)
     self.assertEqual((3, 2), predicted[1].shape)
コード例 #2
0
 def test_return_all_splits(self):
     if K.backend() == 'cntk':
         return
     inputs = layers.Input(shape=(None, ))
     embed = layers.Embedding(input_dim=10, output_dim=100)(inputs)
     outputs = ONLSTM(units=50,
                      chunk_size=5,
                      return_sequences=True,
                      return_splits=True)(embed)
     model = models.Model(inputs=inputs, outputs=outputs)
     model.compile(optimizer=self._get_optimizer(), loss='mse')
     model.summary(line_length=120)
     predicted = model.predict(np.random.randint(0, 10, (3, 7)))
     self.assertEqual((3, 7, 50), predicted[0].shape)
     self.assertEqual((3, 7, 2), predicted[1].shape)
コード例 #3
0
    def test_fit_classification(self):
        model = models.Sequential()
        model.add(layers.Embedding(input_shape=(None,), input_dim=10, output_dim=100, mask_zero=True))
        model.add(layers.Bidirectional(ONLSTM(
            units=50,
            chunk_size=5,
            dropout=0.1,
            recurrent_dropconnect=0.1,
            use_bias=False,
            return_sequences=True,
        )))
        model.add(layers.Bidirectional(ONLSTM(
            units=50,
            chunk_size=5,
            recurrent_dropout=0.1,
            return_sequences=True,
        )))
        model.add(layers.Bidirectional(ONLSTM(units=50, chunk_size=5, unit_forget_bias=False)))
        model.add(layers.Dense(units=2, activation='softmax'))
        model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')

        model_path = os.path.join(tempfile.gettempdir(), 'test_on_lstm_%f.h5' % np.random.random())
        model.save(model_path)
        model = models.load_model(model_path, custom_objects={'ONLSTM': ONLSTM})

        data_size, seq_len = 10000, 17
        x = np.random.randint(0, 10, (data_size, seq_len))
        y = [0] * data_size
        for i in range(data_size):
            if 3 in x[i].tolist() and 7 in x[i].tolist():
                y[i] = 1
        y = np.array(y)
        model.summary()
        model.fit(
            x,
            y,
            epochs=10,
            callbacks=[callbacks.EarlyStopping(monitor='loss', min_delta=1e-3, patience=2)],
        )

        model_path = os.path.join(tempfile.gettempdir(), 'test_on_lstm_%f.h5' % np.random.random())
        model.save(model_path)
        model = models.load_model(model_path, custom_objects={'ONLSTM': ONLSTM})

        predicted = model.predict(x).argmax(axis=-1)
        self.assertLess(np.sum(np.abs(y - predicted)), data_size // 100)