Как просмотреть значения тензора и выполнить индексацию по тензорам при использовании Keras с бэкэндом Theano? - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь воспроизвести сеть, в которой необходимо обновлять точки во встроенном пространстве (автоматического кодера) между каждой партией, используя Keras с бэкэндом Theano. Чтобы сеть работала, она должна выполнять обновления весов сети между каждым пакетом. Функция потерь взята из статьи «К K-значит дружественные пространства».

Поскольку мне приходится обновлять вес сети между каждым пакетом, я делаю это для каждого пакета (обновляет сеть для одного пакета, затем обновляет встроенное пространство перед следующим пакетом):

loss = self.model.train_on_batch(x=self.images[index * self.batch_size:(index + 1) * self.batch_size],
                                             y = [self.images[index * self.batch_size:(index + 1) * self.batch_size]])

self.latent_features = self.model.get_layer(name='embedding').output
self._cluster_distsqs = K.sum(K.square(self.latent_features - self.centroids), axis=2)
self._assigns = K.argmin(self._cluster_distsqs, axis=1)
for i in range(batch_size):
    assign = self._assigns[i]
    count = self.centroid_counts[assign]
    centroid = self.centroids[assign]
    feature = self.latent_features[i]

        if cnt>1:
           new_centroid = centroid - (1.0 / cnt) * (centroid - feature)
           self.centroids[:,assign,:] = new_centroid
        else:   
            self.centroid_counts[assign] = cnt+1

По сути, мне нужно получить значения тензоров в разных точках, и это нужно сделать с помощью индексации. Я пробовал K.get_value (назначить), K.eval (назначить), K.print_tensor (назначить), но, похоже, ничто не позволяет мне получить доступ к фактическому значению тензора. Я пробовал это и для других тензоров, и я всегда получаю TensorVariable, Subtensor (Int64) .0 или что-то в этом роде. Может ли кто-нибудь помочь мне выполнить это, если его путем преобразования в numpy массивов или преобразования всех в тензоры или другой метод все вместе? Большое спасибо!

...