int NumSequenceMatches(const TransformationParameter transform_param,
                           const Datum& datum, Phase phase) {
        // Get crop sequence with Caffe seed 1701.
        DataTransformer<Dtype> transformer(transform_param, phase);
        const int crop_size = transform_param.crop_size();
        Caffe::set_random_seed(seed_);
        transformer.InitRand();
        Blob<Dtype> blob(1, datum.channels(), datum.height(), datum.width());
        if (transform_param.crop_size() > 0) {
            blob.Reshape(1, datum.channels(), crop_size, crop_size);
        }

        vector<vector<Dtype> > crop_sequence;
        for (int iter = 0; iter < this->num_iter_; ++iter) {
            vector<Dtype> iter_crop_sequence;
            transformer.Transform(datum, &blob);
            for (int j = 0; j < blob.count(); ++j) {
                iter_crop_sequence.push_back(blob.cpu_data()[j]);
            }
            crop_sequence.push_back(iter_crop_sequence);
        }
        // Check if the sequence differs from the previous
        int num_sequence_matches = 0;
        for (int iter = 0; iter < this->num_iter_; ++iter) {
            vector<Dtype> iter_crop_sequence = crop_sequence[iter];
            transformer.Transform(datum, &blob);
            for (int j = 0; j < blob.count(); ++j) {
                num_sequence_matches += (crop_sequence[iter][j] == blob.cpu_data()[j]);
            }
        }
        return num_sequence_matches;
    }