bof.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:cbof 作者: passalis 项目源码 文件源码
def initialize_layer(self, data, n_samples=10000):
        """
        Initializes the layer using k-means (sigma is set to the mean pairwise distance)
        :param data: data
        :param n_samples: n_samples to keep for initializing the model
        :return:
        """
        if self.features_fn is None:
            assert False

        idx = np.arange(data.shape[0])
        np.random.shuffle(idx)

        features = []
        for i in range(idx.shape[0]):
            feats = self.features_fn([data[idx[i]]])
            feats = feats.transpose((0, 2, 3, 1))
            feats = feats.reshape((-1, feats.shape[-1]))
            features.extend(feats)
            if len(features) > n_samples:
                break
        features = np.asarray(features)

        kmeans = KMeans(n_clusters=self.n_codewords, n_jobs=4, n_init=5)
        kmeans.fit(features)
        V = kmeans.cluster_centers_.copy()

        # Initialize gamma
        mean_distance = np.sum(pairwise_distances(V)) / (self.n_codewords * (self.n_codewords - 1))
        self.gamma.set_value(self.gamma.get_value() * np.float32(mean_distance))

        # Initialize codebook
        V = V.reshape((V.shape[0], V.shape[1], 1, 1))
        self.V.set_value(np.float32(V))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号