def test_save_restore(self):

        input_size = 20
        n_classes = 5
        sparse_layers = [
            SparseLayer(values=np.array([1, 2, 3]).astype(np.float32),
                        indices=np.array([[0, 1], [1, 2],
                                          [3, 4]]).astype(np.int16),
                        dense_shape=np.array([5, 10]).astype(np.int64),
                        bias=np.array([1, 1, 1, 1, 1]).astype(np.float32)),
            SparseLayer(values=np.array([1, 2, 5]).astype(np.float32),
                        indices=np.array([[0, 2], [1, 2],
                                          [3, 4]]).astype(np.int16),
                        dense_shape=np.array([10, 5]).astype(np.int64),
                        bias=np.array([0, 0, 0, 0, 0]).astype(np.float32))
        ]

        network = network_sparse.FullyConnectedClassifierSparse(
            input_size=input_size,
            n_classes=n_classes,
            sparse_layers=sparse_layers,
            model_path='temp',
            verbose=False)

        variables_original = network.sess.run(network.weight_tensors)
        network.save_model()
        network.load_model()
        variables_restored = network.sess.run(network.weight_tensors)

        for original, restored in zip(variables_original, variables_restored):
            self.assertTrue((original == restored).all())
    def test_shapes(self):

        input_size = 20
        n_classes = 5
        sparse_layers = [
            SparseLayer(values=np.array([1, 2, 3]).astype(np.float32),
                        indices=np.array([[0, 1], [1, 2],
                                          [3, 4]]).astype(np.int16),
                        dense_shape=np.array([5, 10]).astype(np.int64),
                        bias=np.array([1, 1, 1, 1, 1]).astype(np.float32)),
            SparseLayer(values=np.array([1, 2, 5]).astype(np.float32),
                        indices=np.array([[0, 2], [1, 2],
                                          [3, 4]]).astype(np.int16),
                        dense_shape=np.array([10, 5]).astype(np.int64),
                        bias=np.array([0, 0, 0, 0, 0]).astype(np.float32))
        ]

        network = network_sparse.FullyConnectedClassifierSparse(
            input_size=input_size,
            n_classes=n_classes,
            sparse_layers=sparse_layers,
            model_path='temp',
            verbose=False)

        self.assertEqual(network.logits.get_shape().as_list(), [None, 5])
        self.assertEqual(network.loss.get_shape().as_list(), [])
Exemplo n.º 3
0
    values, indices = pruning_utils.get_sparse_values_indices(weights)
    shape = np.array(weights.shape).astype(np.int64)
    sparse_layers.append(
        pruning_utils.SparseLayer(
            values=values.astype(np.float32),
            #values=values.astype(np.int8),
            indices=indices.astype(np.int16),
            dense_shape=shape,
            bias=bias))

pruning_utils.export_quantized("qweights.txt", 3, 0.25, qlayers, qbiases)
# create sparse classifier
sparse_classifier = network_sparse.FullyConnectedClassifierSparse(
    input_size=config_sparse.input_size,
    n_classes=config_sparse.n_classes,
    sparse_layers=sparse_layers,
    model_path=config_sparse.model_path,
    activation_fn=config_sparse.activation_fn)

# test sparse classifiergt
runtime = time.time()
accuracy, loss = sparse_classifier.evaluate(
    data_provider=test_data_provider, batch_size=config_sparse.batch_size)
runtime = time.time() - runtime
print('Sparse network took', runtime, ' seconds to evaluate.')
print('Accuracy on test with sparse model: {accuracy}, loss on test: {loss}'.
      format(accuracy=accuracy, loss=loss))

compRatio = (classifier.params -
             sparse_classifier.params) / classifier.params * 100
print('Compression ratio = ', 100 / (100 - compRatio))