def test_training(self): input_layer = keras.layers.Input(shape=(100, 3)) drop_block_layer = DropBlock1D(block_size=3, keep_prob=0.7)(input_layer) model = keras.models.Model(inputs=input_layer, outputs=drop_block_layer) model.compile(optimizer='adam', loss='mse', metrics={}) model_path = os.path.join(tempfile.gettempdir(), 'keras_drop_block_%f.h5' % random.random()) model.save(model_path) model = keras.models.load_model( model_path, custom_objects={'DropBlock1D': DropBlock1D}, ) model.summary() inputs = np.ones((1, 100, 3)) outputs = model.predict(inputs) self.assertTrue(np.allclose(inputs, outputs)) input_layer = keras.layers.Input(shape=(3, 100)) drop_block_layer = DropBlock1D(block_size=3, keep_prob=0.7, data_format='channels_first')(input_layer) model = keras.models.Model(inputs=input_layer, outputs=drop_block_layer) model.compile(optimizer='adam', loss='mse', metrics={}) model_path = os.path.join(tempfile.gettempdir(), 'keras_drop_block_%f.h5' % random.random()) model.save(model_path) model = keras.models.load_model( model_path, custom_objects={'DropBlock1D': DropBlock1D}, ) model.summary() inputs = np.ones((1, 3, 100)) outputs = model.predict(inputs) self.assertTrue(np.allclose(inputs, outputs))
def test_mask_shape(self): input_layer = keras.layers.Input(shape=(100, 3)) drop_block_layer = DropBlock1D(block_size=3, keep_prob=0.7)(input_layer, training=True) model = keras.models.Model(inputs=input_layer, outputs=drop_block_layer) model.compile(optimizer='adam', loss='mse', metrics={}) model_path = os.path.join(tempfile.gettempdir(), 'keras_drop_block_%f.h5' % random.random()) model.save(model_path) model = keras.models.load_model( model_path, custom_objects={'DropBlock1D': DropBlock1D}, ) model.summary() inputs = np.ones((1, 100, 3)) outputs = model.predict(inputs) for i in range(3): print((outputs[0, :, i] > 0.0).astype(dtype='int32')) inputs = np.ones((1000, 100, 3)) outputs = model.predict(inputs) keep_prob = 1.0 * np.sum(outputs > 0.0) / np.prod(np.shape(outputs)) print(keep_prob) self.assertTrue(0.65 < keep_prob < 0.8, keep_prob) input_layer = keras.layers.Input(shape=(3, 100)) drop_block_layer = DropBlock1D(block_size=3, keep_prob=0.7, data_format='channels_first')( input_layer, training=True) model = keras.models.Model(inputs=input_layer, outputs=drop_block_layer) model.compile(optimizer='adam', loss='mse', metrics={}) model_path = os.path.join(tempfile.gettempdir(), 'keras_drop_block_%f.h5' % random.random()) model.save(model_path) model = keras.models.load_model( model_path, custom_objects={'DropBlock1D': DropBlock1D}, ) model.summary() inputs = np.ones((1, 3, 100)) outputs = model.predict(inputs) for i in range(3): print((outputs[0, i, :] > 0.0).astype(dtype='int32')) inputs = np.ones((1000, 3, 100)) outputs = model.predict(inputs) keep_prob = 1.0 * np.sum(outputs > 0.0) / np.prod(np.shape(outputs)) print(keep_prob) self.assertTrue(0.65 < keep_prob < 0.8, keep_prob)
def test_sync_channels(self): input_layer = keras.layers.Input(shape=(100, 3)) drop_block_layer = keras.layers.Lambda( lambda x: DropBlock1D(block_size=3, keep_prob=0.7, sync_channels=True)(x, training=True), )(input_layer) model = keras.models.Model(inputs=input_layer, outputs=drop_block_layer) model.compile(optimizer='adam', loss='mse', metrics={}) model_path = os.path.join(tempfile.gettempdir(), 'keras_drop_block_%f.h5' % random.random()) model.save(model_path) model = keras.models.load_model( model_path, custom_objects={'DropBlock1D': DropBlock1D}, ) model.summary() inputs = np.ones((1, 100, 3)) outputs = model.predict(inputs) for i in range(1, 3): self.assertTrue(np.allclose(outputs[0, :, 0], outputs[0, :, i])) inputs = np.ones((1000, 100, 3)) outputs = model.predict(inputs) keep_prob = 1.0 * np.sum(outputs > 0.0) / np.prod(np.shape(outputs)) print(keep_prob) self.assertTrue(0.65 < keep_prob < 0.8, keep_prob)