示例#1
0
文件: vocab.py 项目: schottkey7/nengo
    def create_pointer(self, attempts=100, unitary=False):
        """Create a new semantic pointer.

        This will take into account the randomize and max_similarity
        parameters from self.
        """
        if self.randomize:
            count = 0
            p = pointer.SemanticPointer(self.dimensions, rng=self.rng)
            if self.vectors.shape[0] > 0:
                while count < 100:
                    similarity = np.dot(self.vectors, p.v)
                    if max(similarity) < self.max_similarity:
                        break
                    p = pointer.SemanticPointer(self.dimensions, rng=self.rng)
                    count += 1
                else:
                    warnings.warn('Could not create a semantic pointer with '
                                  'max_similarity=%1.2f (D=%d, M=%d)' %
                                  (self.max_similarity, self.dimensions,
                                   len(self.pointers)))

            # Check and make vector unitary if needed
            if unitary:
                p.make_unitary()
        else:
            index = len(self.pointers)
            if index >= self.dimensions:
                raise IndexError('Tried to make more semantic pointers than' +
                                 ' dimensions with non-randomized Vocabulary')
            p = pointer.SemanticPointer(np.eye(self.dimensions)[index])
        return p
示例#2
0
文件: vocab.py 项目: ustczjr86/nengo
 def identity(self):
     """Return the identity vector."""
     if self._identity is None:
         v = np.zeros(self.dimensions)
         v[0] = 1
         self._identity = pointer.SemanticPointer(v)
     return self._identity
示例#3
0
文件: vocab.py 项目: ustczjr86/nengo
    def add(self, key, p):
        """Add a new semantic pointer to the vocabulary.

        The pointer value can be a `.SemanticPointer` or a vector.
        """
        if self.readonly:
            raise ReadonlyError(attr='Vocabulary',
                                msg="Cannot add semantic pointer '%s' to "
                                    "read-only vocabulary." % key)

        if not key[0].isupper():
            raise SpaParseError(
                "Semantic pointers must begin with a capital letter.")
        if not isinstance(p, pointer.SemanticPointer):
            p = pointer.SemanticPointer(p)

        if key in self.pointers:
            raise ValidationError("The semantic pointer %r already exists"
                                  % key, attr='pointers', obj=self)

        self.pointers[key] = p
        self.keys.append(key)
        self.vectors = np.vstack([self.vectors, p.v])

        # Generate vector pairs
        if self.include_pairs and len(self.keys) > 1:
            for k in self.keys[:-1]:
                self.key_pairs.append('%s*%s' % (k, key))
                v = (self.pointers[k] * p).v
                self.vector_pairs = np.vstack([self.vector_pairs, v])
示例#4
0
文件: vocab.py 项目: ustczjr86/nengo
    def create_pointer(self, attempts=100, unitary=False):
        """Create a new semantic pointer.

        This will take into account the randomize and max_similarity
        parameters from self. If a pointer satisfying max_similarity
        is not generated after the specified number of attempts, the
        candidate pointer with lowest maximum cosine with all existing
        pointers is returned.
        """
        if self.randomize:
            if self.vectors.shape[0] == 0:
                p = pointer.SemanticPointer(self.dimensions, rng=self.rng)
            else:
                p_sim = np.inf
                for _ in range(attempts):
                    pp = pointer.SemanticPointer(self.dimensions, rng=self.rng)
                    pp_sim = max(np.dot(self.vectors, pp.v))
                    if pp_sim < p_sim:
                        p = pp
                        p_sim = pp_sim
                        if p_sim < self.max_similarity:
                            break
                else:
                    warnings.warn(
                        'Could not create a semantic pointer with '
                        'max_similarity=%1.2f (D=%d, M=%d)'
                        % (self.max_similarity,
                           self.dimensions,
                           len(self.pointers)))

            # Check and make vector unitary if needed
            if unitary:
                p.make_unitary()
        else:
            index = len(self.pointers)
            if index >= self.dimensions:
                raise ValidationError(
                    "Tried to make more semantic pointers than "
                    "dimensions with non-randomized Vocabulary",
                    attr='dimensions', obj=self)
            p = pointer.SemanticPointer(np.eye(self.dimensions)[index])
        return p
示例#5
0
文件: vocab.py 项目: schottkey7/nengo
    def add(self, key, p):
        """Add a new semantic pointer to the vocabulary.

        The pointer value can be a SemanticPointer or a vector.
        """
        if not key[0].isupper():
            raise KeyError('Semantic pointers must begin with a capital')
        if not isinstance(p, pointer.SemanticPointer):
            p = pointer.SemanticPointer(p)

        if key in self.pointers:
            raise KeyError("The semantic pointer '%s' already exists" % key)

        self.pointers[key] = p
        self.keys.append(key)
        self.vectors = np.vstack([self.vectors, p.v])

        # Generate vector pairs
        if self.include_pairs and len(self.keys) > 1:
            for k in self.keys[:-1]:
                self.key_pairs.append('%s*%s' % (k, key))
                v = (self.pointers[k] * p).v
                self.vector_pairs = np.vstack([self.vector_pairs, v])