Python 在没有后端的情况下使用Keras时,如何查看张量的值并对张量执行索引?

Python 在没有后端的情况下使用Keras时,如何查看张量的值并对张量执行索引?,python,numpy,keras,neural-network,theano,Python,Numpy,Keras,Neural Network,Theano,我试图复制一个网络,其中嵌入空间(自动编码器)中的点需要在每个批之间使用带有Theano后端的Keras进行更新。为了使网络正常工作,它需要在每个批次之间对网络权重执行更新。损失函数来自“走向K-均值友好空间”一文 因为我必须更新每个批次之间的网络权重,所以我对每个批次都这样做(更新一个批次的网络,然后在下一个批次之前更新嵌入空间): 本质上,我需要得到不同点的张量值,这需要通过执行索引来完成。我试过K.get_value(assign)、K.eval(assign)、K.print_tenso

我试图复制一个网络,其中嵌入空间(自动编码器)中的点需要在每个批之间使用带有Theano后端的Keras进行更新。为了使网络正常工作,它需要在每个批次之间对网络权重执行更新。损失函数来自“走向K-均值友好空间”一文

因为我必须更新每个批次之间的网络权重,所以我对每个批次都这样做(更新一个批次的网络,然后在下一个批次之前更新嵌入空间):


本质上,我需要得到不同点的张量值,这需要通过执行索引来完成。我试过K.get_value(assign)、K.eval(assign)、K.print_tensor(assign),但似乎没有任何东西能让我获得张量的实际值。我也尝试过其他张量,我总是得到TensorVariable,Subtensor(Int64).0,或者类似的东西。有人能帮我完成这项工作吗?无论是通过转换成numpy数组,还是将所有的元素转换成张量,还是其他方法?多谢各位

实际值仅在培训过程中存在。这意味着所有东西都隐藏在批量生产的序列中。为此,您需要将所需的张量传递给损失函数,并对要更新的张量使用一些
K.update
或类似的方法。这将只在Lambda层或损失函数中起作用,并且必须在通过反向传播调整权重之前发生。Theano的开发已停止。你使用它有什么具体的原因吗?谢谢你指出这一点@Daniel Moller。我没有意识到这一点。我将批次上的序列号下面的代码移动到自定义丢失函数中。我还将self.centroids、self.assignments等更改为(object_name).centroids、(object_name).assignments等。但是,即使使用此方法,我也会得到相同的错误。“”索引器:只有整数、片(
)、省略号(
)、numpy.newaxis(
None
)和整数或布尔数组是有效的索引“”。@MathiasMüller是的早期,当我使用Tensorflow作为后端时,我遇到了一个关于Tensor对象没有属性ndim的错误。这显然可以通过切换到Theano后端解决,我做到了。“是的,在我使用Tensorflow作为后端的早期,我遇到了一个关于Tensor对象没有属性ndim的错误。”-这肯定是几年前的事了。也许你应该再试一次:-)。
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